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

现男友 阅读:199 2025-06-02 22:19:02 评论:0

我有以下代码:

$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 等于包含加号(例如 A+1)且存在于 $content 上的字符串,否则这段代码效果很好。

有人可以解释一下我该如何处理吗?

请您参考如下方法:

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

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

所以 + 只是一个加号,并不表示“一个或多个”,这就是您的正则表达式不匹配的原因。


声明

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

关注我们

一个IT知识分享的公众号