2014-09-22 136 views
0

我有一个preg_match_all来搜索段落中的单词。它没有找到西里尔字母等我怎样才能改变这种做所有类型的字符(英语,俄语,重音符号等):preg_match_all:包含非ASCII字符

preg_match_all('/\b' . $testWord .'\b/i', $content, $matches, PREG_OFFSET_CAPTURE); 

我曾尝试只是增加ü到底的正则表达式,这似乎是一个解决方案,但我在这里问,看看这是最好的做法,还是有更好的方式来做正则表达式。

preg_match_all('/\b' . $testWord .'\b/iu', $content, $matches, PREG_OFFSET_CAPTURE); 

谢谢

+2

你正在接近这个错误的方式,我相信...我会说用'\ p {L} +'替换你的测试词,它匹配来自任何语言的任何字母。 – hwnd 2014-09-22 00:43:35

回答

2

不幸的是,即使与u修饰词边界速记\b可以行动起来(即不匹配,你希望它。)你想和负lookarounds来取代它们检查\pL(任何字母)或\pM

像这样(任意组合重音符号。):

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

谢谢 - 这对我很好。我用俄语,法语希伯来语和中文单词进行测试。 – mbird 2014-09-22 17:34:21