Отрицательное регулярное выражение для подстановки строки perl
Я пытаюсь сократить все несколько пробелов до одного пробела, за исключением первого появления пробелов (отступ).
Я обнаружил, что этот код заменит первые случаи:
$_ =~ s/^ +/ /;
Поэтому я подумал, что его отрицание будет делать то, что я хочу. Но это не так:
$_ =~ s/!^ +/ /g;
Что я делаю неправильно?
2 ответа
Решение
Вы можете изменить подход к регулярному выражению
s/\S\K +/ /g;
Восклицательный знак не является отрицанием в регулярном выражении. По крайней мере, не так.
Что вам нужно, так это негативный взгляд:
s/(?<!^)\s+/ /g;
Должен сделать свое дело.