Якоря
По умолчанию, вне символьного класса метасимвол начала строки (^) соответствует началу обрабатываемых данных (если не используются модификаторы). Внутри символьного класса он (^) имеет совершенно другое значение.
Метасимвол начала строки (^) не обязан быть первым символом шаблона в случае, если в шаблоне используются несколько альтернатив, но должен быть первым символом в каждой из альтернатив, в которой он встречается, если шаблон когда-либо сопоставим с соответствующей веткой. Если все альтернативы начинаются с метасимвола начала строки (^), то шаблон ограничен для совпадения исключительно в начале строки, говорят что шаблон "заякорен". (Существуют и другие способы "заякорить" шаблон).
Соответствие метасимволу конца строки (знак доллара, $) достигается только в конце строки или непосредственно перед последним символом в случае, если им является перевод строки (если модификаторы не указаны). Метасимвол конца строки ($) не обязан быть последним символом шаблона в случае, если используется несколько альтернатив, но должен быть последним символом в каждой альтернативе, в которой он фигурирует. Внутри символьного класса символ '$' не имеет специального значения.
Поведение метасимвола конца строки может быть изменено при помощи модификатора PCRE_DOLLAR_ENDONLY так, чтобы он соответствовал исключительно концу строки. Данный флаг никак не касается специальной последовательности \Z.
Значение метасимволов начала и конца строки меняется в случае, если используется модификатор PCRE_MULTILINE. В таком случае, помимо совпадений в начале или в конце строки, метасимволы '^' и '$' соответствуют позиции непосредственно после символа перевода строки "\n". Например, шаблон /^abc$/ встречается в строке "def\nabc" в многострочном режиме и не встречается в нормальном режиме. Таким образом, шаблон который "заякорен" в однострочном режиме, все ветки которого, начинаются с "^", не будет являться "заякоренным" в многострочном режиме. Модификатор PCRE_DOLLAR_ENDONLY игнорируется в случае, если модификатор установлен PCRE_MULTILINE.
Следует заметить, что служебные последовательности \A, \Z и \z могут использоваться для сопоставления с началом либо концом строки в обоих режимах. И если все ветви шаблона начинаются с \A, шаблон будет "заякорен" независимо от присутствия модификатора PCRE_MULTILINE.
- PHP Руководство
- Функции по категориям
- Индекс функций
- Справочник функций
- Обработка текста
- Функции для работы с регулярными выражениями (Perl-совместимые)
- Регулярные выражения PCRE
- Вступление
- Разделители
- Метасимволы
- Экранирующие последовательности
- Свойства Unicode-символов
- Якоря
- Метасимвол точка
- Символьные классы
- Альтернативный выбор
- Установка внутренних опций
- Подмаски
- Повторение
- Обратные ссылки
- Утверждения
- Однократные подмаски
- Условные подмаски
- Комментарии
- Рекурсивные шаблоны
- Производительность
Коментарии
Outside square brackets : assert start of subject (or line, in multiline mode)
Inside square brackets : negate the class, but only if the first character
[^0] which means - all but 0
[^A] which means - all but A & so on