"^" и "$"

Наверх  Предыдущий  Следующий

За пределами класса символов, в режиме по умолчанию, символ "^" является утверждением, которое истинно, только если текущая позиция сравнения находится в начале строки. Внутри класса символов он имеет совершенно другое значение (смотри ниже).

 

"^" не обязан быть первым символом шаблона. Так, если имеется несколько альтернатив для начала шаблона, то он может быть первым символом в любой из этих альтернатив. Если все возможные альтернативы начинаются с символа "^", то есть шаблон может совпасть только с началом строки, то говорят, что данный шаблон является "привязанным" ("anchored"). Существуют и другие конструкции, которые могут сделать шаблон "привязанным".

 

Символ доллара "$" - это утверждение, которое истинно, только если текущая позиция сравнения находится в конце исходной строки, либо непосредственно до символа перевода строки, который является последним символом в исходной строке (по умолчанию). Символ доллара не обязан быть последним символом в строке. Так если присутствует несколько альтернатив для конца шаблона, то он может быть последним символом в любой из этих альтернатив. Символ доллара не имеет специального значения внутри класса символов.

 

Значение символа доллара может быть изменено таким образом, что совпадение будет достигаться только в самом конце строки. Для этого должна быть установлена опция PCRE_DOLLAR_ENDONLY. Эта установка не влияет на смысл утверждения "\Z".

 

Значение символов "^" и "$" меняется, если установлена опция PCRE_MULTILINE. В этом случае совпадение будет происходить непосредственно после и до внутреннего символа "\n", в дополнение к совпадению в начале и конце исходной строки. К примеру, шаблон ^abc$ совпадет со строкой:

       def

       abc

в многострочном режиме, но не наоборот. Соответственно, шаблон, который является "привязанным" в однострочном режиме из-за того, что каждая ветвь альтернатив начинается с символа "^" не является "привязанным" в многострочном режиме. Опция PCRE_DOLLAR_ENDONLY игнорируется при установленной опции PCRE_MULTILINE.

 

Заметьте, что последовательности "\A", "\Z" и "\z" могут использоваться для указания начала и конца исходной строки в обоих режимах. Те есть, если все ветви альтернатив начинаются с "\A", то шаблон "привязан" вне зависимости от того, установлена опция PCRE_MULTILINE или нет.