PHP正则表达式忽略特殊字符

问题描述 投票:0回答:1

在SO的帮助下,我能够为我的目的制作正则表达式,它很有效,但它完全忽略了特殊字符。

$pattern='/(?=.*\b\Q'.str_replace(' ','\E\b)(?=.*\b\Q',$requestedservice).'\E\b)/i';  
preg_match($pattern, $item)

这里$requestedservice是它试图与数据库中的$item匹配的角色。

$itemWalk - Dance所以如果$requestedservice也是Walk - Dance,它不匹配,但如果$requestedserviceWalk Dance它匹配。

我不知道为什么它忽略了像- / %这样的特殊人物

我使用html_entity_decode作为$requestedservice所以这不是问题。

任何指导都会非常有用。

php regex laravel
1个回答
1
投票

你的单词边界对你不利。例如,如果你有.,那么你的模式是/(?=.*\b\Q.\E\b)/i,它断言在它之前和之后有一个带有单词边界的文字.,并且由于.是一个非单词字符,这意味着之前必须有一个单词字符之后。

相反,您可以使用(?<!\w)代替第一个和第三个\b(?!\w)来代替第二个和第四个\b,以明确断言在每个需要匹配的字符串部分之前和之后没有单词字符。

© www.soinside.com 2019 - 2024. All rights reserved.