我有一个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(
'/(?<!['pL'pM])' . $testWord .'(?!['pL'pM])/iu',
$content,
$matches,
PREG_OFFSET_CAPTURE
);