главная :: основы PHP
Синтаксис регулярных выражений в стиле Perl
Perl (http://www.perl.com) давно считается одним из самых лучших языков обработки текстов. Синтаксис 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.
|