Сверхжадние або ревниві квантіфікатори в регулярних виразах
Ми з Вами вже розглядали звичайні квантіфікатори повторень, а також розібрали ледачі квантіфікатори. І настав час розглянути ще одну групу - це сверхжадние або ревниві квантіфікатори повторень.
особливість сверхжадних квантіфікаторов в тому, що вони поводяться як жадібні, тобто захоплюють, як можна більшу частину рядка, але ще й не віддають її назад. Тобто вони не дають на перевірку схоплену частина інших частин регулярного виразу.
Для кращого розуміння давайте розберемо приклад:
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
Функції форматного виведення в php
Регулярні вирази
Визначення мови користувача на php
Модифікатори в регулярних виразах
Відправлення запитів до бази даних в php
Як дізнатися країну по ip-адресою через php
Регулярні вирази linux
Функції для роботи з регулярними виразами в php
Російська мова та регулярні вирази в php