Язык программирования Perl



              

Модификаторы


До сих пор операция сопоставления прекращала работу и возвращала результат, когда находилось первое соответствие строки указанному шаблону. Если для операции сопоставления указать модификатор /g (global), то она будет искать в строке все соответствия образцу, организуя неявный цикл обработки регулярного выражения. Например, так можно найти все числа в строке с помощью одного шаблона:

my @numbers = 'Не 12.5, а 25!' =~ /(\d+)/g; # глобальный поиск # в @numbers будет (12, 5, 25)

Ранее в этой лекции уже упоминался модификатор /i, устанавливающий поиск с игнорированием разницы между заглавными и строчными буквами. Перечислим модификаторы для операции сопоставления:

  • /g - искать в тексте все соответствия образцу (Global);
  • /i - искать соответствие образцу без учета регистра букв (case-Insensitive);
  • /s - рассматривать текст как одну строку (Single-line);
  • /m - рассматривать текст как многострочный (Multi-line) с учетом \n ;
  • /o - один раз откомпилировать регулярное выражение (Once);
  • /x - использовать расширенный синтаксис регулярных выражений (eXtended).

Из всех модификаторов, пожалуй, самый интересный - последний, который позволяет записывать регулярные выражения в структурированном и понятном для человека виде и даже сопровождать комментариями! Так, например, можно более понятно и красиво переписать регулярное выражение, приведенное в начале лекции:

m/ # начало регулярного выражения <A # начало тега: <A [^>]+? # далее могут быть любые символы, кроме > HREF # определение гиперссылки \s*=\s* # знак =, возможно окруженный пробелами ["']? # может быть открывающая кавычка или апостроф ( # начало захвата значения [^'" >]+? # адрес ссылки: все, кроме ',",пробела и > ) # конец захвата значения ['"]? # может быть закрывающая кавычка или апостроф \s* # за которым могут быть пробелы > # конец тега /igx; # конец регулярного выражения # соответствует, например: <a id='ru' href="index.html">

Записанное в таком виде, регулярное выражение становится доступным для понимания, анализа и модификации. А поскольку регулярные выражения компилируются, то пробельные символы и комментарии не влияют на быстродействие программы.




Содержание  Назад  Вперед