2011-04-27 131 views
2

Code samplePHP正则表达式:对于英语和阿拉伯语文字

搜索的文章我在寻找这是在英语和阿拉伯语的关键字的文章。 这些文章可以是英文或阿拉伯文。

我当前的代码是:

$k = implode("|", $keywords); 
$regexp = "/(?i)\b(".$k.")\b/"; 
preg_match_all($regexp, $content, $matches); 

但是,这并不在出于某种原因阿拉伯语文章查找关键字。我已验证关键字和文章正在被正确读取;没有编码问题。

我能做些什么来解决这个问题?请注意,我无法检测文章或关键字是英文还是阿拉伯文,所以必须有一个正则表达式来匹配它们。

回答

1

你的正则表达式可能只是缺乏/u nicode标志:

$regexp = "/(?i)\b(".$k.")\b/u"; 

否则PCRE有比较字节。在这种情况下,它可能仍然能够找到单词(当UTF-8编码完全相同时),但不会检测到单词\b

更新
\b真的只检测\w边界(所以取决于语言环境,而不是设置的/ u标志)。然后尝试这个,而不是使用断言:

$regexp = "/(?<!\p{L})(".$k.")(?!\p{L})/ui"; 
+0

不,没有工作! – HyderA 2011-04-27 10:40:21

+0

刚刚测试过。单词边界不适用于阿拉伯语。 **编辑:**那么解释它:http://www.mail-archive.com/[email protected]/msg00110.html – mario 2011-04-27 10:47:52

+0

最优秀的!这很有道理。感谢您的链接! – HyderA 2011-04-27 11:00:48

相关问题