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

jhe*_*ran 3 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 ...
}
Run Code Online (Sandbox Code Playgroud)

这段代码很有效,除非$DBfield它等于一个包含加号(例如A + 1)的字符串$content.

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

Boh*_*ian 5

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

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

所以+只是一个加号而不是"一个或多个",这就是你的正则表达式不匹配的原因.