ГРУППА КУРСА
|
КвантификаторыИспользование квантификаторовВ регулярном выражении каждый класс стоответствует одному символу. Квантификаторы - это спецсимволы, которые ставятся после класса. Они устанавливают повторение класса. При этом класс находит не один символ, а несколько. Практически он находит строку. Каджый символ в этой строке должен соответствовать классу. Чаще всего используется квантификатор "+", который устанавливает любое количество повторений. Он работает так:
Найдём в строке указание количества пикселей. Будем искать такую подстроку: число, а затем "px" Число может состоять из нескольких цифр, поэтому понадобится квантификатор. +
Существуют также следующие квантификаторы: * - 0 или больше раз. То есть, класс является необязательным. Он может повториться любое количество раз или отсутствовать вообще. ? - 0 или один раз. Пример:
Регулярное выражение ищет такую подстроку: сначала "аб", затем число, затем "вг" Найдены два совпадения, хотя во втором нет числа. Квантификатор сделал его необязательным. Есть ещё один способ написать квантификатор - указать конкретное число в фигурных скобках. {2} - ровно 2 символа. Если будет больше или меньше, то совпадения нет. Можно указать диапазон количества символов. Для этого в фигурных скобках нужно указать два числа через запятую. {2,8} - от 2 до 8 символов. {0,4} - от 0 до 4 символов. Второе число можно можно не указывать и оставить только запятую. Это значит, что максимальное количество не установлено. {2,} - два и более символов. Найдём в тексте слова, в которых больше 8 букв:
Жадные и ленивые квантификаторыЧасто квантификаторы не устанавливают точное количество повторений, и класс может произвести разное число повторений. Для таких квантификаторов существует два режима работы - жадный и ленивый. Жадный стремится захватить как можно больше символов. Ленивый старается побыстрее передать очередной символ следующей части паттерна и закончить свою работу. По умолчанию установлен жадный режим. Чтобы задать ленивый, нужно после квантификатора поставить знак "?". Его можно поставить после любого квантификатора, в том числе, после "?". Режим имеет значение, когда символ соответствует и текущему классу и следующей части паттерна. Жадный режим работает так: если очередной символ соответствует классу, то класс забирает его себе. Класс заканчивает работу только тогда, когда символ не подходит. Тогда начинает работать следующая часть паттерна. Ленивый режим работает так: даже если символ соответствует классу, то проверяется, не подходит ли символ следующей части паттерна. Если подходит, то класс отдаёт этот символ ей и заканчивает работу. Самый первый найденный символ он не отдаёт. Пример:
В строке 19 регулярное выражение имеет жадный квантификатор. Оно выполняется так:
В строке 20 выражение имеет линивый квантификатор. Он работает так:
Бывает так, что жадный квантификатор захватывает все символы до конца строки. А до следующей части паттерна очередь так и не дошла. Тогда происходит откат. Выполнение переходит к следующему классу, и он начинает поиск своего символа, двигаясь от конца строки к началу. Когда он находит свой символ, он забирает его себе, а жадному классу остаётся всё, что до него. Свой первый символ жадный класс не отдаёт. Если следующий класс проверяет всю строку жадного класса и не находит своего символа, значит совпадения нет. Ленивый режим часто применяется к классу ".". Ведь он захватит всю строку, если его не ограничить и не передать выполнение остальным частям паттерна. |