Регулярные выражения

Регулярные выражения в Perl чаще всего используются в операторах поиска и замены таких как s/, m/, операторах связки =~ или != и т.д. Все эти операторы имеют схожие опции:

Эти опции, обозначаемые как '/x', можно использовать внутри шаблонов, используя конструкцию (?...). В шаблонах используются следующие метасимволы (символы, обозначающие группы других символов):

Метасимволы имеют модификаторы (пишутся после метасимвола):

Во все других случаях фигурные скобки считаются обычными (регулярными) символами. Таким образом '*' эквивалентна {0,} , '+' - {1,} и '?' - {0,1}. n и m не могут быть больше 65536.

По умолчанию действие метасимволов "жадно" (greedy). Совпадение распространяется столько раз, сколько возможно, не учитывая результат действия следующих метасимволов. Если вы хотите "уменьшить их аппетит", то используйте символ '?'. Это не изменяет значение метасимволов, просто уменьшает распространение. Таким образом:

Шаблоны работают так же, как и двойные кавычки, поэтому в них можно использовать `\` - символы (бэкслэш-символы):

Дополнительно в Perl добавлены следующие метасимволы:

Обратите внимание, что все это "один" символ. Для обозначения последовательности применяйте модификаторы. Так:

Существуют мнимые метасимволы, обозначающие места смены значения:

Граница слова (\b) - это мнимая точка между символами \w и \W. Внутри класса символов '\b' обозначает символ backspace (стирания). Метасимволы \A и \Z - аналогичны '^' и '$', но если начало строки '^' и конец строки '$' действуют для каждой строки в многострочной строке, то \A и \Z обозначают начало и конец всей многострочной строки.

Если внутри шаблона применяется группировка (круглые скобки), то номер подстроки группы обозначается как '\цифра'. Заметьте, что за шаблоном в пределах выражения или блока эти группы обозначаются как '$цифра'. Существуют и дополнительные переменные:

Листинг 5.1.Переменные совпадений.

$s = "Один 1 два 2 и три 3";
if ($s =~ /(\d+)\D+(\d+)/) {
print "$1\n"; # Результат '1'
print "$2\n"; # '2'
print "$+\n"; # '2'
print "$&\n"; # '1 два 2'
print "$`\n"; # 'Один '
print "$'\n"; # ' и три 3'
}

Perl версии 5 содержит дополнительные конструкции шаблонов:

Листинг 5.2.Конструкции шаблонов.

$s = "1+2-3*4";
if ($s =~ /(\d)(?=-)/) # Найти цифру за которой стоит '-'
{ print "$1\n"; # Результат '2'
}
else { print "ошибка поиска\n";}
$s = "1+2-3*4";
if ($s =~ /(\d)(?!\+)/) # Найти цифру за которой не стоит '+'
{ print "$1\n"; # Результат '2'
}
else { print "ошибка поиска\n";}

Правила регулярного выражения. (regex)

Hosted by uCoz