我有一个preg_match_all来搜索段落中的单词。它找不到西里尔字母等。我如何更改它来处理所有类型的字符(英语、西里尔字母、重音字符等):
preg_match_all( '/b' . $testWord .'b/i', $content, $matches, PREG_OFFSET_CAPTURE );
我试着在正则表达式的末尾添加u,这似乎是一个解决方案,但我在这里询问这是否是最佳实践,或者是否有更好的方法来完成我显示的正则表达式。
preg_match_all( '/b' . $testWord .'b/iu', $content, $matches, PREG_OFFSET_CAPTURE );
感谢
不幸的是,即使使用了u
修饰符,单词边界简写b
也可能会出现问题(即与您期望的不匹配)。您需要将它们替换为阴性查找,以检查pL
(任何字母)或pM
(任何组合重音标记)。
像这样:
preg_match_all(
'/(?<![pLpM])' . $testWord .'(?![pLpM])/iu',
$content,
$matches,
PREG_OFFSET_CAPTURE
);