"Дмитрий Леонов. Использование Perl в интернет-технологиях" - читать интересную книгу автораВ приведенных примерах мы использовали простейший образец, состоящий из последовательности обычных символов. Однако возможны и более сложные комбинации. Самый простой символ сопоставления - точка ("."). Она соответствует любому одиночному символу, кроме символа новой строки. Можно задать класс символов сопоставления с помощью списка, заключенного в квадратные скобки: /[абвгде]/; Этому образцу соответствует строка, содержащая один из этих шести символов. Диапазон символов задается с помощью дефиса (сам дефис вставляет в список как \-), символ "^", стоящий сразу за открывающей скобкой, означает отрицание - такому классу символов соответствует любой символ, отсутствующий в этом списке. Некоторые распространенные классы символов имеют предопределенные обозначения: \d [0-9] цифра \w [a-zA-Z0-9_] обычный символ \s [ \r\t\n\f] пробельный символ \D [^0-9] нецифровой символ \W [^a-zA-Z0-9_] специальный символ \S [^ \r\t\n\f] непробельный символ Однако самое интересное начинается при работе с образцами для групп символов, или множителями. Два основных образца здесь - звездочка "*" и плюс "+". Звездочке соответствует ни одного или более экземпляров стоящего перед ней символа или класса символов, плюсу - один или более экземпляров. шаблоне, наконец, с помощью фигурных скобок можно задать точное количество повторений этого символа, или диапазон. /ab*/; # строки, содержащие а, ab, abb, abbb и т.д. /ab+/; # ab, abb, abbb и т.д. /ab?/; # а, ab /ab{2}/; # abb /ab{2,4}/; # abb, abbb, abbbb /ab{2,}/; # abb, abbb, abbbb и т.д. Поиск по шаблону с множителями характеризуется тремя особенностями: "жадностью", "торопливостью" и возвратом. "Жадность" означает, что если шаблон может совпасть со строкой в нескольких вариантах, то выбирается самый длинный: $s = 'abbbbb'; $s =~ s/a.*b/c/; #результирующая строка будет содержать только "с". Любой множитель можно превратить из "жадного" в "ленивый", поставив сразу после него вопросительный знак: $s = 'abbbbb'; $s =~ s/a.*?b/c/; #результирующая строка содержит "cbbbb". "Торопливость" означает, что механизм поиска стремится обнаружить совпадение как можно скорее - так, шаблону /a*/ будет соответствовать любая строка, поскольку * - это 0 или более символов. Наконец, возврат обеспечивает совпадение со строкой не только части регулярного выражения, а всего шаблона. Т.е. если начало шаблона совпадает |
|
|