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

negative regex for perl string substitution

我正在尝试将所有多个 space 缩短为一个 space,除了第一次出现的 space(缩进)。

我发现此代码将替换第一次出现的代码:

$_ =~ s/^ +/ /;

所以我想,它的否定会做我想要的。但它没有:

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

我做错了什么?

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

你需要的是负面回顾:

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

应该可以解决问题。

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

s/\S\K +/ /g;