Поиск

Создание простого шаблона

Перед тем как применять встроенные функции регулярных выражений РНР, необходимо создать шаблон, который будет использоваться функцией для по иска совпадений. В РНР есть ряд правил создания шаблонов. Многие из них аналогичны применяемым в языках Perl, С и Java. Эти правила можно исполь зовать по отдельности или в любой комбинации для создания как совсем прос тых, так и очень сложных шаблонов.

Чтобы понять, как создавать шаблоны, сначала проанализируем использу емые для этого особые символы, или метасимволы. Затем обсудим, как группи ровать символы, и охарактеризуем классы. Шаблон определяется комбинаци ей символов, групп и классов.

Литералы

Первый тип символов, используемый для создания шаблона это литерал. Он обозначает только то, что обозначает, и не более того. Например, шаблону «а» будет соответствовать только буква «а», шаблону «ab» только «ab» и т.д. Литералы позволяют находить точные соответствия, но, если бы регуляр ные выражения использовались только для этого, они были бы гораздо ме нее полезны (тогда для работы со строками было бы достаточно нескольких функций, см. главу 5). Для создания общих шаблонов можно также применять специальные символы, имеющие в регулярных выражениях особенное значе ние (см. ниже).

Метасимволы

Более сложной структурой, чем литералы, являются метасимволы. Это специ альные символы, имеющие более широкое значение. Так, если «а» означает просто «а», то первый метасимвол, точка (.), отождествляется с любым отдель ным символом (а, 1, % и т.д.). Достаточно просто, однако обратите внимание на следующее: если вы хотите использовать метасимвол буквально, его необхо димо заэкранировать, как мы уже экранировали кавычки в команде print ( ) . Например, точке, использующейся в тексте (знак препинания без специально го значения), будет соответствовать символ «\ .».

Есть три метасимвола, позволяющие находить многочисленные соответ ствия: «а*» отождествляется с нулем или любым количеством букв «а» (а, аа, ааа и т.д.); «а+» отождествляется с одной или более «а» (а, аа, ааа и т.д., но хотя бы одна должна быть); и «а?» отождествляется с нулем или одной бук вой «а». Каждый метасимвол меняет смысл стоящей перед ним буквы. Про граммисты, уверенно работающие с регулярными выражениями, могут ме нять смысл фразы. В силу того что указанные метасимволы (*, +, ?) позволяют «размножить» стоящее перед ними выражение, их иногда называют символа миумножителями.

Для поиска определенного количества одной буквы необходимо поместить в фигурные скобки диапазон ({}), указав либо конкретное число, либо мини мум, либо и минимум и максимум. Например, «а {3}» будет соответствовать только «ааа»; «а {3 ,}» ааа, аааа и т.д. (три или больше букв «а»); «а {3 , 5}» ааа, аааа и ааааа (между тремя и пятью буквами включительно).

Знак «крышечка» (л, тот, что обычно представлен на клавиатуре над циф рой 6) будет соответствовать строке, начинающейся со следующей за знаком буквы. Этот знак можно условно представить как псевдосимвол, с которого начинается каждая строка. Знак доллара ($) отождествляется со строкой, которая заканчивается предшествующей этому символу буквой. Его также можно представить как самый последний символ в строке, обозначающий переход на новую строку. Такой символ в отличие от «крышечки» ( А ) действительно существует, он вставляется в текст, как только вы нажимаете клавишу Enter. Следовательно, запись ла. будет соответствовать любой строке из двух символов, начина ющейся на букву «а», а запись .а$ любой двухсимвольной строке, заканчива ющейся буквой «а». Следовательно, знак ~а$ будет отождествляться только со строкой из одного символа «а», являясь эквивалентом литерала «а» на отдель ной строке.

В регулярных выражениях также используется знак вертикальной черты (|) как эквивалент слова «или». Следовательно, запись а I b будет соответствовать строкам а или Ь, а запись gre I ay будет отождествляться с обоими вариантами написания названия цвета (по-английски и grey, и gray означают «серый»). С помощью вертикальной черты в шаблонах выполняется чередование. Вышеприведенные примеры наглядно показывают, как работают метасим волы. Прежде всего вам необходимо привыкнуть, что означают различные сим волы и как они используются.

При использовании фигурных скобок для указания количества знаков всегда не обходимо задавать минимум поиска: а {3} и а {3,} приемлемые варианты в от личие от записи а {,3}.
Специальные символы (". [ ] $ ( ) I * ? {} \) в шаблоне должны быть экранированы посредством поставленного перед ними обратного слеша. Это справедливо для метасимволов и для группирующих символов (разнообразных скобок). Обратный слеш можно также использовать для отождествления с символом новой строки (\п), символом табуляции (\t) и некоторыми другими. По сути, таким образом мы создаем метасимвол из литерала.
В табл. С.2 (приложение С) приведен полный список метасимволов и их комбина ций, которые используются в регулярных выражениях.