PHP Word Censor 帮助,使用正则表达式根据标准审查单词

标签 php regex

大家好,我正在尝试构建一个正则表达式来维持以下标准。

在此示例中要审查的单词“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);

查看here on Regexr

您只需确保 $word 的内容不以非单词字符开头或结尾,则单词边界不起作用。

\b是一个词边界。它匹配从单词字符(如 \w 中定义)到非单词字符(如 \W 中定义)的更改。 ,或者反之亦然。

替代方案:空白边界

如果您不喜欢单词边界,因为要替换的单词可能以“#view”等非单词字符开头或结尾,请定义您自己的“空白边界”,例如像这样:

(?<=^|\s)#view(?=$|\s)

查看here on Regexr

会像这样查看您的代码

$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/

相关文章:

模式中的正则表达式否定

javascript正则表达式用data-src替换所有img src

PHP chunk() 替代方案

PHP PDO登录系统失败

java - 正则表达式与 & 符号不匹配

python - 无法将 JSON 文件中的正则表达式作为 Python 中的字符串读取

python - 将\n\t 等转义字符替换为\\t ,\\n

php - 解码 JSON $_POST

php 回显其他 php 代码

php - 在php中获取ffmpeg中的音频持续时间