Якоря

По умолчанию, вне символьного класса метасимвол начала строки (^) соответствует началу обрабатываемых данных (если не используются модификаторы). Внутри символьного класса он (^) имеет совершенно другое значение.

Метасимвол начала строки (^) не обязан быть первым символом шаблона Если в шаблоне используются несколько альтернатив, но должен быть первым символом в каждой из альтернатив, в которой он встречается, если шаблон когда-либо сопоставим с соответствующей веткой. Если все альтернативы начинаются с метасимвола начала строки (^), то шаблон ограничен для совпадения исключительно в начале строки, говорят что шаблон «заякорен». (Существуют и другие способы «заякорить» шаблон).

Соответствие метасимволу конца строки (знак доллара, $) достигается только в конце строки или непосредственно перед последним символом в случае, если им является перевод строки (если модификаторы не указаны). Метасимвол конца строки ($) не обязан быть последним символом шаблона Если используется несколько альтернатив, но должен быть последним символом в каждой альтернативе, в которой он фигурирует. Внутри символьного класса символ «$» не имеет специального значения.

Поведение метасимвола конца строки может быть изменено модификатором PCRE_DOLLAR_ENDONLY так, чтобы он соответствовал исключительно концу строки. Данный флаг никак не касается специальной последовательности \Z.

Значение метасимволов начала и конца строки меняется Если используется модификатор PCRE_MULTILINE. В этой ситуации, кроме совпадений в начале или в конце строки, метасимволы «^» и «$» соответствуют позиции непосредственно после символа перевода строки «\n». Например, шаблон /^abc$/ встречается в строке «def\nabc» в многострочном режиме и не встречается в нормальном режиме. Таким образом, шаблон который «заякорен» в однострочном режиме, все ветки которого, начинаются с «^», не будет являться «заякоренным» в многострочном режиме. Модификатор PCRE_DOLLAR_ENDONLY игнорируется Если модификатор установлен PCRE_MULTILINE.

Следует заметить, что служебные последовательности \A, \Z и \z могут использоваться для сопоставления с началом либо концом строки в обоих режимах. И если все ветви шаблона начинаются с \A, шаблон будет «заякорен» независимо от присутствия модификатора PCRE_MULTILINE.

add a note add a note

User Contributed Notes 1 note

up
1
srf
7 years ago
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
To Top