正则表达式不适用于包含+ inside的输入字符串

时间:2016-06-03 09:13:35

标签: regex perl

我有以下代码:

$url = "http://www.example.com/url.html";
$content=Encode::encode_utf8(get $url);

$nameaux = Encode::encode_utf8($DBfield);

if($content =~ />$nameaux<\/a><\/td><td class="class1">(.*?)<\/td>/ ||
   $content =~ />$nameaux<\/a><\/td><td class="class2">(.*?)<\/td>/ ||
   $content =~ />$nameaux<\/a><\/td><td class="class3">(.*?)<\/td>/ ) {
    ... more code ...
}

除非$DBfield等于$content上存在的包含加号(例如A + 1)的字符串,否则这段代码效果很好。

有人可以解释我如何处理这个问题吗?

1 个答案:

答案 0 :(得分:5)

如果$ nameaux可以包含正则表达式字符(例如+),则需要通过使用\Q ... \E换行将字段转义为正则表达式文字。

$content =~ />\Q$nameaux\E<\/a><\/td><td class="class1">(.*?)<\/td>/ ||

所以+只是一个加号而不是&#34;一个或多个&#34;,这就是你的正则表达式不匹配的原因。