Отрицательное регулярное выражение для подстановки строки perl

Я пытаюсь сократить все несколько пробелов до одного пробела, за исключением первого появления пробелов (отступ).

Я обнаружил, что этот код заменит первые случаи:

$_ =~ s/^ +/ /;

Поэтому я подумал, что его отрицание будет делать то, что я хочу. Но это не так:

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

Что я делаю неправильно?

2 ответа

Решение

Вы можете изменить подход к регулярному выражению

s/\S\K +/ /g;

Восклицательный знак не является отрицанием в регулярном выражении. По крайней мере, не так.

Что вам нужно, так это негативный взгляд:

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

Должен сделать свое дело.

Другие вопросы по тегам