Лабы
Физика

Черчение

Лекции
Задачи
Синтаксис регулярных выражений в стиле Perl

Perl давно считается одним из самых лучших языков обработки текстов. Синтаксис Perl позволяет осуществлять поиск и замену даже для самых сложных шаблонов. Разработчики РHР сочли, что не стоит заново изобретать уже изобретенное, а лучше сделать знаменитый синтаксис регулярных выражений Perl доступным для пользователей РНР. Так появились функции для работы с регулярными выражениями в стиле Perl.

Диалект регулярных выражений Perl не так уж сильно отличается от диалекта POSIX. В сущности, синтаксис регулярных выражений Perl является отдаленным потомком реализации POSIX, вследствие чего синтаксис POSIX почти совместим с функциями регулярных выражений стиля Perl.

Оставшаяся часть этого раздела будет посвящена краткому знакомству с диалектом регулярных выражений Perl. Рассмотрим простой пример:

/food/

Обратите внимание: строка food заключена между двумя косыми чертами. Как и в стандарте POSIX, вы можете создавать более сложные шаблоны при помощи квантификаторов:

/fo+/

Этот шаблон совпадает с последовательностью fo, за которой могут следовать дополнительные символы о. Например, совпадения будут обнаружены в строках food, fool и fo4. Рассмотрим другой пример использования квантификатора:

/fo{2,4}/

Шаблон совпадает с символом f, за которым следуют от 2 до 4 экземпляров символа о. К числу потенциальных совпадений относятся строки fool , fooool и foosball .

В регулярных выражениях Perl могут использоваться все квантификаторы, упомянутые в предыдущем разделе для регулярных выражений POSIX.

Метасимволы

Одной из интересных особенностей Perl является использование метасимволов при поиске. Метасимвол [Следует отметить, что авторское толкование термина <метасимвол> противоречит не только всем традициям, по и официальной документации РНР. - Примеч. перев.] представляет собой алфавитный символ с префиксом \ - признаком особой интерпретации следующего символа. Например, метасимвол \d может использоваться при поиске денежных сумм:

/([d]+)000/

Комбинация \d обозначает любую цифру. Конечно, в процессе поиска часто возникает задача идентификации алфавитно-цифровых символов, поэтому в Perl для них был определен метасимвол \w:

/<([\w]+)>/

Этот шаблон совпадает с конструкциями, заключенными в угловые скобки, - например, тёгами HTML. Кстати, метасимвол \W имеет прямо противоположный смысл и используется для идентификации символов, не являющихся алфавитно-цифровыми.

Еще один полезный метасимвол, \b, совпадает с границами слов:

/sa\b/

Поскольку метасимвол границы слова расположен справа от текста, этот шаблон совпадет в строках salsa и lisa, но не в строке sand. Противоположный метасимвол, \В, совпадает с чем угодно, кроме границы слова:

/sa\B/

Шаблон совпадает в таких строках, как sand и Sally, но не совпадает в строке salsa.

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

Модификаторы заметно упрощают работу с регулярными выражениями. Впрочем, модификаторов много, и в табл. 8.1 приведены лишь наиболее интересные из них. Модификаторы перечисляются сразу же после регулярного выражения - например, /string/i.

Таблица 8.1. Примеры модификаторов

Модификатор
Описание

m Фрагмент текста интерпретируется как состоящий из нескольких <логических строк>. По умолчанию специальные символы ^ и $ совпадают только в начале и в конце всего фрагмента. При включении <многострочного режима> при помощи модификатора m^ и $ будут совпадать в начале и в конце каждой логической строки внутри фрагмента
s По смыслу противоположен модификатору m - при поиске фрагмент интерпретируется как одна строка, а все внутренние символы новой строки игнорируются
i Поиск выполняется без учета регистра символов

Вводный курс получился очень кратким, поскольку полноценное описание по регулярным выражениям выходит за рамки этой книги и требует нескольких глав вместо нескольких страниц. За дополнительной информацией о синтаксисе регулярных выражений обращайтесь к следующим ресурсам Интернета:

http://www.php.net/manual/pcre.pattern.modifiers.php;
http://www.php.net/manual/pcre.pattern.syntax.php;
http://www.perlcom/pub/doc/manual/html/pod/perlre.html;
http://www.codebits.com/p5be;
http://www.metronet.com/1/perlinfo/doc/FMTEYEWTK/regexps.html.

Электротехника