首页 > 解决方案 > 在字符前后插入字符,但忽略两个字符之间的空格

问题描述

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

我尝试这个正则表达式,但它返回不正确

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

但它会返回以下内容

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

我想要的是这个

        [:echo '<pre>';:]

提前致谢

标签: phpregexpreg-replace

解决方案


您可以使用

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

请参阅正则表达式演示。匹配三个或更多连续的\S{3,}非空白字符,同时\S+匹配这些字符中的一个或多个。

请注意,您不需要将整个匹配包含在捕获组中,您可以$0在替换模式中使用来引用整个匹配。


推荐阅读