PHP Word审查帮助,使用正则表达式根据条件审查Word

PHP Word审查帮助,使用正则表达式根据条件审查Word,php,regex,Php,Regex,大家好,我正在尝试构建一个正则表达式,它将支持以下条件 本例中“视图”中要审查的单词。 审查后使用的字符:“%”,因为“*”会弄乱我的帖子格式 单词使用示例: 查看 视图 预览 我去看了美景 景色很美,不是吗 单词审查后的示例: %%%% 视图 预览 我去看了伟大的%% %%很棒,不是吗。 以下是我的一些代码: $string = preg_replace_callback('/\s*'. preg_quote($word, '\\') .'\s*/is', 'bbcode_callback_c

大家好,我正在尝试构建一个正则表达式,它将支持以下条件

本例中“视图”中要审查的单词。 审查后使用的字符:“%”,因为“*”会弄乱我的帖子格式

单词使用示例:
查看
视图
预览
我去看了美景
景色很美,不是吗

单词审查后的示例:
%%%%
视图
预览
我去看了伟大的%%
%%很棒,不是吗。

以下是我的一些代码:

$string = preg_replace_callback('/\s*'. preg_quote($word, '\\') .'\s*/is', 'bbcode_callback_censored', $string);

问题是,由于我在正则表达式“\s”中使用了“*”,所以现在这项匹配所有内容。你知道我能做些什么来满足我的标准吗?

不匹配空格,请使用

试一试

看到了吗

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

\b
是单词边界。它匹配从单词字符(定义见
\w
)到非单词字符(定义见
\w
)的更改,或者相反

备选方案:空白边界

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

(?<=^|\s)#view(?=$|\s)
(?这样可以

$text_without_views = preg_replace('/(^|\W)view($|\W)/','\1***\2',$text_with_views);

对于这个简单的任务,您不必使用速度慢且内存不足的正则表达式引擎,可以使用
str_replace
-它会用替换字符串替换所有出现的搜索字符串

$string = str_replace(' view ','%',$string);

我不是真正的舒尔你想做什么。如果你只是想替换一个单词,我会使用str_replace。我在原始帖子中提供了一个基于我想审查“视图”的单词的例子。第一个示例显示了该词的所有可能用法,然后下面的另一个示例显示了如果我的正则表达式成功会发生什么。Str_replace不会这样做,因为它的功能不够强大。但这也会删除“预览”中的视图,是的,但它处理的是以非单词字符开头的单词的问题。一种解决方法是在搜索字符串的引号中添加空格。无需进行替换。
\b
也会在字符串的开头和结尾匹配。非常感谢您对它的深入研究。我正在试验单词边界,它似乎在g太好了。我想+1这个,但我还没有足够的代表。谢谢。@ThomasSultana,你还不能投票,但你能够接受帮助你的答案。完成了,只是想好了怎么做。谢谢
$text_without_views = preg_replace('/(^|\W)view($|\W)/','\1***\2',$text_with_views);
$string = str_replace(' view ','%',$string);
$str = "view viewing view view";
$str = preg_replace('/(^|\b)view(\b|$)/is', ' %%%% ', $str);
echo $str;