preg_match_all:包括非ASCII字符


preg_match_all: Include non-ASCII characters

我有一个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
);