我有以下代码:
$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
.
有人可以解释我如何处理这个?
如果$ nameaux可以包含正则表达式字符(如+),则需要通过包装\Q
... 来将字段转义为正则表达式文字\E
.
$content =~ />\Q$nameaux\E<\/a><\/td><td class="class1">(.*?)<\/td>/ ||
Run Code Online (Sandbox Code Playgroud)
所以+
只是一个加号而不是"一个或多个",这就是你的正则表达式不匹配的原因.