在SO的帮助下,我能够为我的目的制作正则表达式,它很有效,但它完全忽略了特殊字符。
$pattern='/(?=.*\b\Q'.str_replace(' ','\E\b)(?=.*\b\Q',$requestedservice).'\E\b)/i';
preg_match($pattern, $item)
这里$requestedservice
是它试图与数据库中的$item
匹配的角色。
$item
是Walk - Dance
所以如果$requestedservice
也是Walk - Dance
,它不匹配,但如果$requestedservice
是Walk Dance
它匹配。
我不知道为什么它忽略了像-
/
%
这样的特殊人物
我使用html_entity_decode
作为$requestedservice
所以这不是问题。
任何指导都会非常有用。
你的单词边界对你不利。例如,如果你有.
,那么你的模式是/(?=.*\b\Q.\E\b)/i
,它断言在它之前和之后有一个带有单词边界的文字.
,并且由于.
是一个非单词字符,这意味着之前必须有一个单词字符之后。
相反,您可以使用(?<!\w)
代替第一个和第三个\b
和(?!\w)
来代替第二个和第四个\b
,以明确断言在每个需要匹配的字符串部分之前和之后没有单词字符。