PCRE:(+)和( - )向前/向后看(正则表达式)

时间:2011-05-27 06:26:15

标签: html regex pcre lookbehind lookahead

我有以下字符串:

<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 个答案:

答案 0 :(得分:2)

你不需要任何复杂的东西,你可以放弃这个:

/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 :(得分:1)

最好使用解析器,但是如果你的链接总是以完全相同的方式格式化(没有id,类,额外的参数,不同顺序的参数等,请尝试:

parent=(\w+?)\+*&Color=(\w+?)">(.*?)<
与穆的建议不同的是贪婪。