Рейтинг@Mail.ru
 

Шаг 3


Модификаторы и спецсимволы

Поехали дальше. В прошлой главе вы уже увидели пару примеров регулярных выражений. Однако возможностей у RE гораздо больше. Вот сейчас попробуем собрать в кучу то, из чего можно строить паттерны, то есть основные элементы синтаксиса регулярных выражений.

Некоторые термины которые мы будем использовать:
Шаблон – Простым языком это заданные параметры, если вы забыли, что это посмотрите Главу 1.
Модификатор – Это символ, который указывается сразу послу шаблона, пример ("#шаблон#модификатор"). С двумя модификаторами вы уже познакомились в Главе 2 это (i, u), их мы ещё раз повторим в этой главе.
Метасимвол – Символ, который имеет специально назначение и используется для поиска какой – то подстроки.
Литерал – Символ который не имеет спец. назначения или экранирован.

Сначала мы с вами познакомимся с модификаторами шаблонов.

( i ) – Этот модификатор значит, что регистр символов который будет обрабатываться регуляркой, не будет иметь значения, то есть будет ли он верхним или нижним или вообще смешанным, для нас это никакой роли играть не будет.

( m ) – Этот модификатор указывается для того, чтобы строка проверялась от начала до самого конца.

( s ) – Модификатор "s", говорит о том, что "." начинает в себя включать и перевод строки, наряду с остальными символами. Т.е. АБСОЛЮТНО все видимые и не видимые символы.

( x ) – Этот модификатор активирует режим который будет игнорировать пробелы, или табуляцию в шаблоне если перед ними не используется ( ).

( e ) – Этот модификатор игнорируют все функции, кроме preg_replace. А последняя, после того как выполнит подстановку то, что подставлено будет считаться PHP – кодом.

( A ) – Если данный модификатор установлен, значит функция вернет TRUE лишь в том случае, если подстрока будет найдена в начале строки, иначе будет FALSE.

( D ) – Если данный модификатор используется, значит, метасимвол ($ – Доллар) в шаблоне будет соответствовать окончанию поиска.

( U ) – Модификатор для того, чтобы запутать всех. ???????

( X ) – Как вы должны уже были понять, что все спец. символы должны экранироваться в шаблоне для того, чтобы воспринимались как обычные. Так вот этот модификатор вернет ошибку, если перед символом, который не имеет спец. назначения будет экранирован.

( u ) – Этот модификатор мы встречали в Главе 1 (напомню ещё раз), что он предназначен для работы с символами в кодировке UTF-8.

Теперь нам ещё предстоит рассмотреть метасимволы. Есть метасимволы и литералы.

Метасимволы:
( \ ) – Метасимвол, который экранирует спец. символы.
( ^ ) – (Крышка или циркумфлекс), означает начало строки, или линии, если многострочный режим.
( $ ) – Означает конец строки, или линии, если многострочный режим.
( . ) – Означает любой символ кроме перевода строки.
( [ ) – Начало символьного класса.
( ] ) – Конец символьного класса.
( | ) – Означает “ИЛИ” в конструкции выбора.
( ( ) – Начало подмаски или конструкции выбора.
( ) ) – Конец подмаски или конструкции выбора.
( ? ) – Если "?" стоит перед круглыми скобками, то знак вопроса является идентификатором ссылки. Если "?" стоит перед "*" или "+", тогда это показатель "ленивого" поиска. Что такое "ссылка", "ленивый" и "жадный поиск" и для чего они нужны будет рассказано чуть позднее. ( * ) – Ставиться перед символом, который должен, встретится ноль или более раз.
( + ) – Ставиться перед символом, который должен, встретится один или более раз.
( { ) – Начало квантификатора, в котором можно указать сколько должно быть последовательных символов.
( } ) – Конец предыдущего.

Часть шаблона может быть заключена в ( [ ] – квадратные скобки) – это называется Символьный класс. В нём те символы, которые мы увидели, понимаются немного иначе. Вот как:

В символьном классе, мы указываем, какие символы пропускаем, а какие нет. Например [A-ZА-ЯЁ] – здесь мы указали, что пропускаем только символы от A до Z и от А – Я плюс Ё.

( \ ) – Экранирует символы.
( ^ ) – Инвертирует весь символьный класс. Если мы напишем [^A-ZА-Я], это будет означать, все символы кроме от A до Z и от А до Я.
( - ) – Дефис означает интервал, то есть A – Z от А до Z.

Ещё можно использовать экранированные символы для указания типа символа.

( \d ) – Любая цифра. Вместо того, чтобы писать [0-9], это значит любая цифра от 0 до 9. Но можно написать попроще, то есть так: [\d]
( \D ) – Все символы кроме цифры.
( \s ) – Это значит любой пробельный символ: пробел, табуляция, символ новой строки.
( \S ) – Все символы которые не относятся к ( \s ).
( \w ) – Любой символ который образует слово. Это символы [-A-ZА-Я_].
( \W ) – Все символы которые не относятся к ( \w ).

И последнее, это специальные последовательности, которые указывают, где должна располагаться искомая подстрока.

( \b ) – Это значит граница слова, подстрока должна быть отделена пробелами.
( \B ) – Обратно от ( \b ).

Так же наряду с простым обозначением существуют "иные" символьные классы:
[[:alpha:]], что соответствует промежутку [A-z] или [A-Za-z], что одно и то же.
[[:digit:]] эквивалент - [0-9]
[[:alnum:]] Эквивалент [A-z0-9]
[[:space:]] Эквивалентом являются все невидимые символы.

Особого смысла в них нету, поскольку такой тип записи существенно сложнее. Но если встретите такое обозначение, будете знать, что под ним подразумеваеться.
Так же краткая рекомендация по написанию регулярок - не следует использовать краткие обозначения. При сложных и длинных выражениях весьма просто запутаться что имелось ввиду. В силу того, что \s обозначает одно, а \S СОВЕРШЕННО противоположное. И на регистр можно не обратить внимание или просто забыть в каком регистре находилась буква. И по сему желательно использовать символьный класс в явном виде, т.е. [A-zА-яЁё] и так далее. Вот мы и закончили с теорией, и в последующих главах у нас будет практика. Если вы что-то не поняли, не огорчайтесь, читая только теорию невозможно все понять, для этого нужна только практика, тогда будет всё понятнее.

Артем aka Winston & Гришин Сергей aka DedMorozzz