preg_match_all:包含非ASCII字符

时间:2014-09-22 00:39:09

标签: php regex preg-match-all

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

谢谢

1 个答案:

答案 0 :(得分:2)

不幸的是,即使使用u修饰符,单词边界缩写\b也可以起作用(即不符合您期望的那样。)您将要替换它们检查\pL(任何字母)或\pM(任何组合重音标记)的负面外观。

像这样:

preg_match_all(
    '/(?<![\pL\pM])' . $testWord .'(?![\pL\pM])/iu',
    $content,
    $matches,
    PREG_OFFSET_CAPTURE
);