Учебник по основам PHP. PHPBeginner


Синтаксис регулярных выражений - часть 4


Альтернативы и классы символов

Допустим, в тексте нужно найти слово: «АА», «Бб» или «ВвВ», тогда в шаблоне следует указать 'АА|Бб|ВвВ', используя как обозначение альтернативы знак |, Допустимо любое число альтернатив и пустая альтернатива (соответствующая пустому фрагменту). Перебор альтернатив производится слева направо, и используется первая подходящая.

Для удобства можно заключать список альтернатив в скобки (то есть образовывать, таким образом, подшаблон), и в дальнейшем ссылать-ся на найденную альтернативу с помощью обратной ссылки. Например, шаблон: '*<(Н1|Н2|НЗ)>( .*)</\\l>*imUs' будет искать содержимое тегов заголовков.

Иногда необходимо искать символ, который может принимать различные значения, тогда используется класс символов, обозначаемый символами «[» и «]». Чтобы использовать символ ] в классе символов в качестве «самого себя», следует ставить перед ним слеш: \].

Если первый символ класса «А», то это означает: «любой символ, кроме тех, которые указаны в классе». Символ минус обозначает (если он не является первым или последним символом класса) символьный диапазон. Например, класс [лО-9] соответствует любому нецифровому символу (также можно записать как [А\хЗО-\х39]). Любую английскую букву можно указать как [a-z] |[A-Z]'. Если необходимо включить в класс символы «А» и «-», то первый не должен быть первым символом класса, а второй должен стоять в начале или конце класса.

В классе символов или вместо них допускается использование подстановок: \d, \D, \s, \S, \w. \W. Например, можно использовать последовательность \D вместо [лО-9]; или [\da-fA-F] для указания «любой шсстнадцатеричной цифры».

Класс символов в отличие от альтернатив сопоставляется только одному символу! Для того чтобы найти несколько символов из класса, используйте числители.

Прочие метасимволы (например, «$» или «}») в классе метасимволами не являются, но все же их желательно предварять слешем.

Особое значение имеет метасимвол «точка» (вне класса символов). Фактически он эквивалентен классу [*/n], представляющему собой совпадение с любым символом (включая также непечатные). Но, по умолчанию, если не используется модификатор s, ему не может соответствовать символ перехода на новую строку (\n); при указании же модификатора s точка соответствует абсолютно любому символу (то есть классу [\0-\xFF]).




Начало  Назад  Вперед



Книжный магазин