正则表达式删除标志之间的空格

时间:2017-03-15 13:01:54

标签: regex preg-replace

我想删除带有正则表达式的前导preg_replace('!^>(?: +)>!m', '>>', $text); 符号之间的空格:

> > > Hello

不适用于

> >> Hello
> >    > Hello
>>Hello >  >
>>> Hello
> >>     Hello

我想表现得像这样:

>>> Hello
>>> Hello
>> Hello >  >
>>> Hello
>>>     Hello

应该成为

>

但第二个{{1}}已用于匹配前两个符号。

请参阅:https://regex101.com/r/4uiyWG/1

1 个答案:

答案 0 :(得分:1)

如果您在单独的字符串上执行替换,请使用

$s = preg_replace('~\G\h*>~', '>', $s);

请参阅regex demo

\G运算符匹配字符串的开头或前一个成功匹配的结尾。 \h*将匹配零个或多个水平空白符号。

如果您想要删除输入的每行上的前导>之间的空格,请使用

$s = preg_replace('~(?:\G|^)\h*>~m', '>', $s)

请参阅this regex demo

此处,(?:\G|^)更改是必要的,因为\G(即使/m修饰符)与行的开头不匹配。)