Скажем, у вас есть строки, похожие на это
1 int some_function() {
2 int x = 3; // Some silly comment
И так далее. Отступ делается с пробелами, и каждый отступ имеет два пробела.
Вы хотите изменить каждый отступ на три пробела. Простое регулярное выражение
s/ {2}/ /g
Не работает для вас, потому что это изменяет некоторые недопустимые пробелы; в этом случае он меняет два пробела перед // Some silly comment
на три пробела, что нежелательно. (Это становится намного хуже, если есть таблицы или комментарии, выровненные на заднем конце строки.)
Вы не можете просто использовать
/^( {2})+/
Потому что что бы вы его заменили? Я не знаю простого способа узнать, сколько раз +
было сопоставлено в регулярном выражении, поэтому мы не знаем, сколько измененных отступов нужно вставить.
Вы всегда можете идти по очереди и отрезать отступы, измерять их, строить новую строку отступа и привязывать ее к строке, но было бы намного проще, если бы существовало регулярное выражение.
Существует ли регулярное выражение для замены уровней отступа, как описано выше?