Глобальная замена (/g)

Как вы, вероятно, заметили в предыдущих примерах, s/// выполняет только одну замену, даже если в строке возможны и другие совпадения. Конечно, это всего лишь режим по умолчанию. Модификатор /g требует, чтобы оператор s/// выполнял все возможные неперекрывающиеся1 замены:

$_ = "home, sweet home!";
s/home/cave/g;
print "$_\n"; # "cave, sweet cave!"


Глобальная замена часто используется для свертки пропусков, то есть замены всех серий разных пропусков одним пробелом:

$_ = "Input data\t may have extra whitespace.";
s/\s+/ /g; # "Input data may have extra whitespace."


Удаление начальных и завершающих пропусков также выполняется достаточно легко:

s/^\s+//; # Замена начальных пропусков пустой строкой
s/\s+$//; # Замена завершающих пропусков пустой строкой


То же можно было бы выполнить одной командой с альтернативой и флагом /g, но такое решение работает чуть медленнее (по крайней мере, на момент написания книги). Впрочем, ядро регулярных выражений постоянно оптимизируется; информацию о том, из-за чего регулярные выражения работают быстро (или медленно), можно найти в книге Джеффри Фридла (Jeffrey Friedl) «Mastering Regular Expressions»1 (O’Reilly).

s/^\s+|\s+$//g; # Удаление начальных и завершающих пропусков

Теги:
регулярные выражения
Добавлено: 20 Июля 2018 19:31:17 Добавил: Андрей Ковальчук Нравится 0
Добавить
Комментарии:
Нету комментариев для вывода...