我需要找到一种方法来在文本中查找字符串的一部分,并用***
替换它例如,我有文字"Jumping fox jumps around the box"
在正常情况下,我会使用:
preg_replace(' / \ b(fox)\ b / i',' ****'," fox");
但我希望在文字"Jumping f.o.x jumps around the box"
时涵盖案例
或"Jumping f o x jumps around the box"
所以基本上,我需要正则表达式来支持那种搜索......覆盖更多特殊字符甚至更好
答案 0 :(得分:1)
一种方法是在搜索字符串的每个字符之间添加要忽略的字符类。这可以通过简单的PHP函数来完成
$string = 'Jumping f.o.x jumps around the box';
$word = 'fox';
$ignore = '[\s\.]*';
$regex = '/\b' . join($ignore, str_split($word)) . '\b/i';
$new_string = preg_replace($regex, '***', $string);
如果您的单词包含一些正则表达式特殊字符,您可能希望将preg_quote
应用于每个字符。
join($ignore, array_map(function($char) {
return preg_quote($char, '/');
}, str_split($word)));
答案 1 :(得分:0)
这是最终功能。
if (! function_exists('preg_replace_word')) {
function preg_replace_word($search, $replace, $string)
{
$ignore = '[\s\._-]*';
$regex = '/\b' . join($ignore, str_split($search)) . '\b/i';
return preg_replace($regex, $replace, $string);
}
}