perl字符串替换的负正则表达式

时间:2015-11-10 17:13:25

标签: regex perl substitution negation

我试图将所有多个空格缩短到一个空格,除了第一次出现空格(缩进)。

我发现此代码将取代第一次出现:

$_ =~ s/^ +/ /;

所以我想,它的否定会做我想要的。但事实并非如此:

$_ =~ s/!^ +/ /g;

我做错了什么?

2 个答案:

答案 0 :(得分:2)

您可以更改正则表达式的方法

s/\S\K +/ /g;

答案 1 :(得分:1)

感叹号不是正则表达式中的否定。至少,不是那样的。

你需要的是负面的背后:

s/(?<!^)\s+/ /g;

应该做的伎俩。