m/ # начало регулярного выражения
]+? # далее могут быть любые символы, кроме >
HREF # определение гиперссылки
\s*=\s* # знак =, возможно окруженный пробелами
["']? # может быть открывающая кавычка или апостроф
( # начало захвата значения
[^'" >]+? # адрес ссылки: все, кроме ',",пробела и >
) # конец захвата значения
['"]? # может быть закрывающая кавычка или апостроф
\s* # за которым могут быть пробелы
> # конец тега
/igx; # конец регулярного выражения
# соответствует, например:
Записанное в таком виде, регулярное выражение становится доступным для понимания, анализа и модификации. А поскольку регулярные выражения компилируются, то пробельные символы и комментарии не влияют на быстродействие программы.
Кроме поиска, регулярные выражения часто применяются для замены найденных совпадений на новые значения. Для этого существует операция замены (substitution), которая пытается найти в строковой переменной соответствие образцу, а если находит, то заменяет найденную подстроку на указанное значение. Операция замены выглядит так:
$variable =~ s/образец/замена/;
# в переменной $variable отыскивается строка 'образец',
# и если найдена, то она заменяется на 'замена'
Все, что говорилось до этого про операцию сопоставления, применимо для левой части операции замены, в которой указывается образец поиска. Левая и правая части операции замены интерполируются, поэтому там могут использоваться escape-последовательности и переменные.
$pattern = 'шило'; # образец
$replacement = 'мыло'; # замена
$text =~ s/$pattern/$replacement/; # поменять 'шило' на 'мыло'
В правой части операции замены могут использоваться обратные ссылки на найденные значения. Так, например, можно поменять местами два крайних слова в тройке слов, разделенных пробельными символами:
$text = 'мать любит дочь';
$text =~ s/(\S+)\s+(\S+)\s+(\S+)/\3 \2 \1/;
# в $text будет 'дочь любит мать'
Для операции замены
$our_computers =~ s/Windows/Linux/g;
У операции замены есть дополнительный модификатор /e (expression evaluation), при включении которого заменяющая часть вычисляется как выражение. При этом в заменяющей части можно использовать ссылки на захваченные при помощи круглых скобок соответствия. Это можно применять для более "интеллектуальной" замены найденных соответствий. Так, например, можно перевести температуру из шкалы Цельсия в шкалу Фаренгейта:
$text = 'Бумага воспламеняется при 233C.';
$text =~ s/(\d+\.?\d*)C\b/int($1*1.8+32).'F'/e;
# в $text будет: 'Бумага воспламеняется при 451F.'
Регулярные выражения применяются во многих конструкциях. В функции
@substrings = split /\s+/, $text; # разбить на части
Регулярные выражения часто применяются в функциях, работающих с массивами для фильтрации нужных элементов. Например, функция
@result = grep /$pattern/, @source; # отобрать элементы
С помощью функции
@hrefs = ('http://regex.info', 'http://regexp.ru');
map s{http://}{}, @hrefs; # убрать 'http://' из ссылок
Вильям Л Саймон , Вильям Саймон , Наталья Владимировна Макеева , Нора Робертс , Юрий Викторович Щербатых
Зарубежная компьютерная, околокомпьютерная литература / ОС и Сети, интернет / Короткие любовные романы / Психология / Прочая справочная литература / Образование и наука / Книги по IT / Словари и Энциклопедии