我正在搜索有关英语和阿拉伯语的关键字的文章。 这些文章可以是英文或阿拉伯文。
我目前的代码是:
$k = implode("|", $keywords);
$regexp = "/(?i)\b(".$k.")\b/";
preg_match_all( $regexp, $content, $matches );
但由于某种原因,这并没有在阿拉伯文章中找到关键字。我已经确认关键字和文章都正确阅读;没有编码问题。
我该怎么做才能解决这个问题?请注意,我无法检测文章或关键字是英文还是阿拉伯文,因此必须有一个正则表达式来匹配它们。
答案 0 :(得分:1)
你的正则表达式可能只是缺少/u
nicode标志:
$regexp = "/(?i)\b(".$k.")\b/u";
否则PCRE必须比较字节。在这种情况下,它仍然可以找到单词(当UTF-8编码相同时),但不会检测单词\b
oundaries。
<强>更新强>
好的\b
实际上只检测\w
边界(因此取决于区域设置而不是/ u标志)。然后尝试这个,它使用断言:
$regexp = "/(?<!\p{L})(".$k.")(?!\p{L})/ui";