在字符前后插入字符但忽略两个字符之间的 space

Insert character before and after of character but ignore space between two characters

如何在一个字符前后插入字符,但忽略两个或多个字符之间的空格。

我尝试了这个正则表达式,但它 return 不正确

$str = "        echo '<pre>';";
$replaces = preg_replace('/(\S{3,})/', '[::]',$str);
var_dump($replaces);

但是return下面这个

        [:echo:] [:'<pre>';:]

我要的是这个

        [:echo '<pre>';:]

提前致谢

您可以使用

preg_replace('~\S{3,}(?:\s\S{3,})*~', '[:[=10=]:]', $str)?
preg_replace('~\S+(?:\s\S+)*~', '[:[=10=]:]', $str)?

参见regex demo\S{3,} 匹配三个或更多连续的非空白字符,而 \S+ 匹配这些字符中的一个或多个。

注意你不需要用捕获组包围整个匹配,你可以在替换模式中使用 [=13=] 来引用整个匹配。