22.2. Регулярные выражения
К счастью, PHP предлагает и более мощные инструменты, чем функция strtok, - регулярные выражения. Описанные на своем собственном языке, регулярные выражения позволяют описывать шаблоны, которые затем сравниваются со строками. Исходный код PHP включает в себя реализацию регулярных выражений, удовлетворяющих стандарту POSIX 1003.2. Этот стандарт позволяет создавать не только выражения старого стиля, но и работать с новым стилем, который описывается ниже. Подробное описание регулярных выражений см. в главе 12, "Кодирование и декодирование". 
В 1999 году Андрей Змиевский добавил в PHP поддержку регулярных выражений, соответствующих стилю языка Perl. Они имеют два преимущества перед оригинальными регулярными выражениями PHP: упрощают копирование выражений из сценария Perl и выполняются быстрее.
Более глубокое изучение регулярных выражений выходит за рамки настоящей книги. Регулярные выражения - это тема для отдельной книги, здесь же затрагиваются только основы и описываются различные PHP-функции, в работе которых используются регулярные выражения. Отличным источником информации о регулярных выражениях является книга Элли Квигли (Ellie Quigley) UNIX Shells by Example. Если есть желание узнать побольше о регулярных выражениях PERL-стиля, обратитесь к официальному Web-узлу с документацией по Perl (<http://www.perldoc.com/ perl5.8.0/pod/ perlre.html>). Затем нужно ознакомиться с документацией на самом Web-узле PHP, где описываются различия между реализацией регулярных выражений в Perl и PHP (<http://www.php.net/manual/pcre.pattern.syntax.php>). Действительно, реализации регулярных выражений в PHP присуще несколько отличий, но большинство выражений Perl выполняются в PHP в неизменном виде.
22.3. Определение регулярных выражений
На верхнем уровне регулярное выражение представляет собой одну или несколько ветвей, разделенных вертикальной чертой (|). Этот символ должен обладать свойствами "логического ИЛИ", т.е. любая из строк должна соответствовать оцениваемой строке. Несколько примеров такой строки приводится в табл. 22.1.
Синтаксический анализ и обработка строк
Каждая ветвь содержит один или несколько атомов, с помощью которых определяется количество соответствий данному атому. Символ звездочка (*) свидетельствует о том, что соответствие атому может определяться любое количество раз. Знак "плюс" (+) означает, что соответствие атому может определяться как минимум один раз. Знак вопроса (?) " свидетельствует о том, что соответствие атому может определяться один раз или не соответствовать совсем.
Кроме того, атом может быть связан, что означает, что он содержит число, заключенное в фигурные скобки ({}). Если в фигурных скобках содержится одно число, это означает, что атом должен иметь соответствие именно такое число раз. Если в фигурные скобки заключены число и запятая, атом должен соответствовать именно такое или большее количество раз. Если в скобках указываются два числа, разделенных запятыми, это означает, что атом должен соответствовать по меньшей мере число раз, равное первому числу, но не более числа раз, указанных вторым числом. Примеры правил повторения приведены в табл. 22.2.
Синтаксический анализ и обработка строк
Атомом называется последовательность символов, из которых одни могут иметь специальное значение, а другие просто соответствуют определенному символу. Символ точки (.) соответствует любому одиночному символу, (Л) - началу строки, символ доллара ( $) - завершению строки. Если необходимо указать соответствия специальному символу (Л . [] $ () | * ? {} ), его необходимо предварить обратной косой чертой. В принципе любой символ, предваряемый символом обратной косой черты, будет рассматриваться как литерал, даже если у него нет никакого специального значения. Любой символ, не имеющий специального значения, считается символом, который должен соответствовать независимо от того, следует он за обратной косой чертой, или нет. Атом группируется с помощью скобок.