Жадібні і ледачі квантіфікатори в регулярних виразах

Відео: PHP РОБОТА формальному виразу. Жадібність квантіфікаторов і межа слова

Жадібні і ледачі квантіфікатори в регулярних виразах

Я колись писав про квантіфікатор повторень. Так ось, ми з Вами там розглянули тільки "жадібних"Представників. Однак, не завжди їх"жадібність"Нам допомагає, дуже часто вона і шкодить. Трохи нижче я покажу приклад, де чітко видно те, що вони іноді роблять, а також покажу як зменшити їх запал і зробити квантіфікатори повторень "ледачими".

Давайте розберемо простий і вже став класичним приклад:

Відео: Жадібні і Ледачі регулярні вирази

lt ;?php
$ str
="Невелика рядок c жирним виділенням. "-
$ result_str
= preg_replace("/.* Lt; / bgt; / i ","Здесь_жірное_виделеніе", $ str) -
echo $ result_str
-
?gt;



Можливо, Ви очікуєте щось на зразок цього: "Невелика здесь_жірное_виделеніе з здесь_жірное_виделеніе виділенням". Тобто просто заміна вмісту всередині тега lt;bgt; на задану нами рядок разом з самим тегом. Однак, це не зовсім так, оскільки тут вступає в гру "жадібність квантіфікаторов". І в результаті заміна була не всередині кожного тега lt;bgt ;, а від самого першого відкриваючого тега до самого останнього закриває. В цьому і полягає жадібність.

Відео: 08 Жадібні і ледачі квантіфікатори




Ось як треба писати даний код, щоб заміна відбувалася так, як ми хочемо:

lt ;?php
$ str
="Невелика рядок c жирним виділенням. "-
$ result_str
= preg_replace("/.*? Lt; / bgt; / i ","Здесь_жірное_виделеніе", $ str) -
echo $ result_str
-
?gt;

Все, що ми змінили це регулярний вираз, поставивши після квантіфікатора повторень ".*"Знак питання, який саме і робить квантіфікатор "ледачим". Тепер результатом буде: "Невелика здесь_жірное_виделеніе c здесь_жірное_виделеніе виділенням.", Чого ми і намагалися домогтися.

Відео: Крива Безьє по трьох точках, розрахувати за формулою або намалювати самому

Я дуже сподіваюся, що Ви усвідомили проблему "Жадібності" квантіфікаторов і зрозуміли, як вони працюють. А також усвідомили, як це можна виправити простим знаком "?". Ця тема дійсно важлива, і величезна кількість новачків в регулярних виразах роблять одні й ті ж помилки, пов`язані з "Жадібністю" квантіфікаторов повторень, тому якщо Ви ще не усвідомили весь сенс до кінця, то перечитайте статтю ще раз.

Поділися в соціальних мережах:

Схожі
Регулярні виразиРегулярні вирази
Сверхжадние або ревниві квантіфікатори в регулярних виразахСверхжадние або ревниві квантіфікатори в регулярних виразах
Парсинг xml-документа на phpПарсинг xml-документа на php
Модифікатори в регулярних виразахМодифікатори в регулярних виразах
Регулярні вирази linuxРегулярні вирази linux
Функції для роботи з регулярними виразами в phpФункції для роботи з регулярними виразами в php
Мета-теги для пошукових систем в htmlМета-теги для пошукових систем в html
Російська мова та регулярні вирази в phpРосійська мова та регулярні вирази в php
Windows 8: бути? Чи не бути? ..Windows 8: бути? Чи не бути? ..
Приклади регулярних виразівПриклади регулярних виразів
» » Жадібні і ледачі квантіфікатори в регулярних виразах