大家好,我正在尝试构建一个正则表达式来维持以下标准。
在此示例中要审查的单词“view”。 审查后使用的字符:“%”,因为“*”弄乱了我的帖子格式。
词语使用示例:
查看
观点
预览
我去看美景了
景色很棒不是吗。
单词审查后的示例:
%%%%
观点
预览
我去看伟大的%%%%
%%%% 很棒不是吗。
这是我的一些代码:
$string = preg_replace_callback('/\s*'. preg_quote($word, '\\') .'\s*/is', 'bbcode_callback_censored', $string);
问题是这与现在的所有内容匹配,因为我在正则表达式“\s”中使用了“*”。有什么想法我可以做些什么来满足我的标准吗?
最佳答案
不匹配空格,请使用 word boundary
尝试
$string = preg_replace_callback('/\b'. preg_quote($word, '\\') .'\b/is', 'bbcode_callback_censored', $string);
您只需确保 $word
的内容不以非单词字符开头或结尾,则单词边界不起作用。
\b
是一个词边界。它匹配从单词字符(如 \w
中定义)到非单词字符(如 \W
中定义)的更改。 ,或者反之亦然。
替代方案:空白边界
如果您不喜欢单词边界,因为要替换的单词可能以“#view”等非单词字符开头或结尾,请定义您自己的“空白边界”,例如像这样:
(?<=^|\s)#view(?=$|\s)
会像这样查看您的代码
$string = preg_replace_callback('/(?<=^|\s)'. preg_quote($word, '\\') .'(?=$|\s)/is', 'bbcode_callback_censored', $string);
(?<=^|\s)
如果之前有字符串开头或空格则匹配
(?=$|\s)
如果字符串末尾或前面有空格则匹配
关于PHP Word Censor 帮助,使用正则表达式根据标准审查单词,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10618839/