在字符前后插入字符但忽略两个字符之间的 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=]
来引用整个匹配。
如何在一个字符前后插入字符,但忽略两个或多个字符之间的空格。
我尝试了这个正则表达式,但它 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=]
来引用整个匹配。