在做了一些研究后,我似乎无法找到解决问题的方法。我有一个坏词列表,我希望能够看到用户是否留下了任何这些词的评论。我尝试过不同的正则表达式但没有成功。顺便说一句,我没有正则表达的大师。
让我说我的名单上有$word = 'bi'
这个词。并且评论说:$comment = he is bi
,使用preg_match($pattern, $comment)
,其中父级已经:1)$word#i
2)/\s+($word)/\s+/i
3)/\b($word)/\b/i
使用此代码:
if (preg_match($pattern, $commentdata['comment_content'])) {
echo 'spam';
}
else {
echo 'true'
}
我明白了:
1)spam
这也是我不想阻止的单词linke combination
的情况
2)true
3)true
如何创建仅匹配单词而不匹配单词的模式?
答案 0 :(得分:1)
这样做,你就在解决方案附近:
preg_match("~\b$word\b~i", $comment);
对于某些特殊情况,例如“双向”:
你可以改用:
preg_match("~(?<![a-z]-)\b$word\b(?!-[a-z])~i", $comment);
答案 1 :(得分:1)
$pattern = "/\b{$word}/\b/i" ;
或
$pattern = "/(\b{$word}\b)/i" ;
会做的工作。