PCRE: (+) и (-) смотреть вперед / назад (Regex) - PullRequest
0 голосов
/ 27 мая 2011

У меня есть следующая строка:

<A href="CarPage.asp?parent=CAR123+++&Color=RED">The Car is Red - Its Fast</a>

И я хочу извлечь:

  • CAR123
  • RED
  • Автомобиль красный - его быстрый

То, что у меня есть до сих пор:

(?<=<A href="CarPage\.asp\?parent=)[A-Za-z0-9]*(\+\+\+&Color=)[A-Za-z0-9]{3}(\">)[A-Za-z0-9\- ]*(?=</a>)

Но я не уверен, как настроить положительный и отрицательный взгляд и взгляд назад, когда они не находятся на границах строки.

Я знаю, это HTML ... Я слышал это раньше ... "Не разбирай html с регулярным выражением ..." Мне не нужно ничего более сложного, чем это.

Помощь приветствуется.

Спасибо!

Ответы [ 2 ]

2 голосов
/ 27 мая 2011

Вам не нужно ничего сложного, вы, вероятно, можете обойтись без этого:

/parent=(\w+).*Color=(\w+).*>(.*)</

А затем вытяните детали из $1, $2 и $3.Возможно, вам придется немного сжать части .* в зависимости от того, насколько переменным является ваш реальный ввод.

Например, этот бит Perl:

my $s = '<A href="CarPage.asp?parent=CAR123+++&Color=RED">The Car is Red - Its Fast</a>';
$s =~ /parent=(\w+).*Color=(\w+).*>(.*)</;
print join("\n", $1, $2, $3), "\n";

Выходы:

CAR123
RED
The Car is Red - Its Fast
1 голос
/ 27 мая 2011

Лучше использовать парсер, но если ваша ссылка всегда форматируется одинаково (без идентификаторов, классов, дополнительных параметров, параметров в другом порядке и т. Д., Попробуйте:

parent=(\w+?)\+*&Color=(\w+?)">(.*?)<

Различныйс предложением Му жадность.

...