Привязки
Привязки позволяют закрепить за регулярным выражением позицию в начале или в конце обычной или входной строки. Они также позволяют создавать выражения, соответствующие началу, концу или внутренней части слова.
Например, в выражении er\b часть \b соответствует границе слова. Выражение соответствует сочетанию er в слове never, а не в слове verb.
Принцип действия привязки
В следующей таблице содержится список привязок регулярных выражений и их значений:
Знак |
Описание |
---|---|
^ |
Соответствует позиции в начале входной строки. Если символ m (поиск в нескольких строках) имеет флаги, то символ ^ также соответствует позиции после символов \n и \r. |
$ |
Соответствует позиции в конце входной строки. Если символ m (поиск в нескольких строках) имеет флаги, то символ $ также соответствует позиции перед символами \n и \r. |
\b |
Соответствует границе слова, то есть позиции между словом и пробелом. |
\B |
Соответствует позиции, отличной от границы слова. |
Нельзя использовать квантификатор с привязкой. Поскольку непосредственно перед или после знака новой строки или границы слова не может существовать более одной позиции, использование выражений, похожих на ^*, запрещено.
Чтобы получить соответствие для текста в начале текстовой строки, поставьте в начале регулярного выражения знак "^". Не путайте данное применение знака "^" с его использованием в выражении в квадратных скобках.
Чтобы получить соответствие для текста в конце текстовой строки, поставьте в конце регулярного выражения знак "$".
В следующем регулярном выражении демонстрируется использование привязок при поиске заголовков глав. Это выражение соответствует заголовку главы, содержащему не более двух цифр в номере и расположенному в начале строки:
/^Chapter [1-9][0-9]{0,1}/
Действительный заголовок главы не просто располагается в начале строки, он содержит весь текст в этой строке. Он находится как в начале, так и в конце одной и той же строки. Следующее выражение исключает перекрестные ссылки и обеспечивает соответствие только заголовкам глав. Это достигается благодаря тому, что в регулярном выражении поиск совпадения выполняется как в начале, так и в конце строки текста.
/^Chapter [1-9][0-9]{0,1}$/
Соответствие границам слов обеспечивается немного иначе, но благодаря ему становится доступно одно очень важное применение регулярных выражений. Граница слова — это позиция между словом и пробелом. Ее противоположность — это любая позиция, отличная от границы слова. Следующее выражение соответствует первым трем знакам в слове Chapter, поскольку они стоят после границы слова:
/\bCha/
Положение оператора "\b" является критически важным. Если он находится в начале искомой строки, то совпадение ищется в начале слова. Если он находится в конце строки, то совпадение ищется в конце слова. Например, следующее выражение соответствует строке ter в слове Chapter, поскольку она находится перед границей слова:
/ter\b/
Следующее выражение соответствует строке apt в слове Chapter, но не в слове aptitude:
/\Bapt/
В слове Chapter строка apt имеет позицию, отличную от границы слова, но в слове aptitude, она находится на границе слова. Положение оператора "\B", обозначающего позицию, отличную от границы слова, не имеет значения, поскольку он задает совпадение, не относящееся к началу или концу слова.