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.
|