Сверхжадние або ревниві квантіфікатори в регулярних виразах
Ми з Вами вже розглядали звичайні квантіфікатори повторень, а також розібрали ледачі квантіфікатори. І настав час розглянути ще одну групу - це сверхжадние або ревниві квантіфікатори повторень.
особливість сверхжадних квантіфікаторов в тому, що вони поводяться як жадібні, тобто захоплюють, як можна більшу частину рядка, але ще й не віддають її назад. Тобто вони не дають на перевірку схоплену частина інших частин регулярного виразу.
Для кращого розуміння давайте розберемо приклад:
lt ;?php
preg_match(`/".*"/i`,`A "b" c "d"`, $ matches) -
print_r($ matches) -
?gt;
Чи не для кого не буде сюрпризом, що відповідність буде виявлено і цей рядок: "B" c "d". Це звичайний жадібний квантіфікатор, який взяв якомога більшу частину рядка, а потім віддав назад. Власне, завдяки цьому "відкату", Відповідність і було виявлено.
Відео: Java RegEx. Урок 7. Ревнива (сверхжадная) квантификация
Тепер же поставимо свержадний квантіфікатор (.* + - додали знак "+"):
lt ;?php
preg_match(`/".*+"/i`,`A "b" c "d"`, $ matches) -
print_r($ matches) -
?gt;
Відповідності взагалі не буде, оскільки сверхжадний квантіфікатор після того, як дістався до останньої лапки (ознака "жадібності"), Що не відкотився назад (ознака"сверхжадності").
Скажу чесно, в своїй практиці я не знайшов жодного варіанту використання даного типу квантіфікатора. Всі приклади, які я бачив в Інтернеті були на зразок: "з Москви до Ленінграда через Владивосток". Вони все легко обійшлися б без свержадних квантіфікаторов. Однак, єдина користь від них, яку я міг би припустити - це відмінна продуктивність. Давайте я наведу приклад, де це може бути використано. Припустимо, у нас є рядок: "aaa". Ми хочемо зробити так, щоб регулярний вираз спрацьовувало, якщо є на кінці"b". Зрозуміло, рядок"aaa"Ніколи не буде відповідати такій вимозі:
lt ;?php
echo preg_match(`/ A + b / i`,`Aaa`) -
echo preg_match(`/ A ++ b / i`,`Aaa`) -
?gt;
У першому випадку ми використовували звичайний жадібний квантіфікатор, у другому випадку сверхжадний. Результатом обох регулярних виразів став 0. Однак! Друге регулярний вираз (там, де сверхжадний) Спрацював значно швидше. Таким чином, сверхжадние квантіфікатори можна використовувати для швидкого відсіву свідомо невідповідних рядків.
- Chcp - перегляд або зміна кодової сторінки в командному рядку windows.
- Як знайти всі посилання на сторінці через php
- Як дізнатися країну по ip-адресою через php
- Функції для роботи з регулярними виразами в php
- Константи в php
- Формат json
- Функція sscanf в php
- Визначення мови користувача на php
- Серіалізация об`єктів в php.
- Приклади регулярних виразів
- Регулярні вирази
- Спецсимволи в регулярних виразів
- Квантіфікатори в регулярних виразів
- Російська мова та регулярні вирази в php
- Відправлення запитів до бази даних в php
- Модифікатори в регулярних виразах
- Функції форматного виведення в php
- Заборона доступу до файлів через mod_rewrite
- Жадібні і ледачі квантіфікатори в регулярних виразах
- Метасимволи в регулярних виразів
- Екранування регулярного виразу в php