替换PHP中用空格或其他特殊字符分隔的字符串

时间:2017-11-14 21:40:16

标签: php regex laravel preg-replace preg-match

我需要找到一种方法来在文本中查找字符串的一部分,并用***

替换它

例如,我有文字"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"

所以基本上,我需要正则表达式来支持那种搜索......覆盖更多特殊字符甚至更好

2 个答案:

答案 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);
    }
}