Spec-Zone .ru
спецификации, руководства, описания, API
След: Существенные Классы
Урок: Регулярные выражения
Граничный Matchers
Домашняя страница > Существенные Классы > Регулярные выражения

Граничный Matchers

До сих пор мы только интересовались тем, находится ли соответствие в некотором расположении в пределах определенной строки ввода. Мы никогда не заботились о том, где в строке соответствие имело место.

Можно сделать свои соответствия образца более точными, определяя такую информацию с границей matchers. Например, возможно Вы интересуетесь обнаружением определенного слова, но только если это появляется вначале или конец строки. Или возможно Вы хотите знать, имеет ли соответствие место на границе слова, или в конце предыдущего соответствия.

Следующая таблица приводит и объясняет всю границу matchers.

Граничная Конструкция Описание
^ Начало строки
$ Конец строки
\b Граница слова
\B Граница неслова
\A Начало ввода
\G Конец предыдущего соответствия
\Z Конец ввода, но для заключительного разделителя, если любой
\z Конец ввода

Следующие примеры демонстрируют использование границы matchers ^ и $. Как отмечено выше, ^ соответствует начало строки, и $ соответствует конец.

 
Enter your regex: ^dog$
Enter input string to search: dog
I found the text "dog" starting at index 0 and ending at index 3.

Enter your regex: ^dog$
Enter input string to search:       dog
No match found.

Enter your regex: \s*dog$
Enter input string to search:             dog
I found the text "            dog" starting at index 0 and ending at index 15.

Enter your regex: ^dog\w*
Enter input string to search: dogblahblah
I found the text "dogblahblah" starting at index 0 and ending at index 11.

Первый пример успешен, потому что образец занимает всю строку ввода. Второй пример перестал работать, потому что строка ввода содержит дополнительный пробел вначале. Третий пример определяет выражение, которое учитывает неограниченный пробел, сопровождаемый "собакой" на конце строки. Четвертый пример требует, чтобы "собака" присутствовала в начале строки, сопровождаемой неограниченным количеством символов слова.

Чтобы проверить, начинается ли образец и заканчивается на границе слова (в противоположность подстроке в пределах более длинной строки), только используйте \b с обеих сторон; например, \bdog\b

 

Enter your regex: \bdog\b
Enter input string to search: The dog plays in the yard.
I found the text "dog" starting at index 4 and ending at index 7.

Enter your regex: \bdog\b
Enter input string to search: The doggie plays in the yard.
No match found.

Чтобы соответствовать выражение на границе неслова, использовать \B вместо этого:

 
Enter your regex: \bdog\B
Enter input string to search: The dog plays in the yard.
No match found.

Enter your regex: \bdog\B
Enter input string to search: The doggie plays in the yard.
I found the text "dog" starting at index 4 and ending at index 7.

Чтобы потребовать, чтобы соответствие произошло только в конце предыдущего соответствия, использовать \G:

 
Enter your regex: dog 
Enter input string to search: dog dog
I found the text "dog" starting at index 0 and ending at index 3.
I found the text "dog" starting at index 4 and ending at index 7.

Enter your regex: \Gdog 
Enter input string to search: dog dog
I found the text "dog" starting at index 0 and ending at index 3.

Здесь второй пример находит только одно соответствие, потому что второе возникновение "собаки" не запускается в конце предыдущего соответствия.


Проблемы с примерами? Попытайтесь Компилировать и Выполнить Примеры: FAQ.
Жалобы? Поздравление? Предложения? Дайте нам свою обратную связь.

Предыдущая страница: Группы фиксации
Следующая страница: Методы Класса Образца