PHP регулярні вирази екранування – особливості реалізації

338

Від автора: регулярки – це «каламутна» тема! Там і точка може виявитися не точкою, а метасимволом. Так і з іншими знаками теж все в тумані. І щоб «зазирнути» за цей серпанок, потрібно в PHP регулярні вирази застосувати екранування.

Чому всі «мутно»?

Синтаксис шаблонів, створених з допомогою регулярок, використовуються метасимволи. Ось, наприклад, звичайна точка. Це знак, який ставиться в кінці речення. Начебто нічого незвичайного! Але це до тих пір, поки ви не почнете застосовувати її в регулярних виразах. Зовсім заплуталися? Ну, тоді поясню, що таке PHP екранування і як з ним боротися на прикладі:

Оголосимо завдання, яке повинен виконати наведений вище приклад. Є рядок, в якому потрібно замінити всі точки на знак оклику, щоб підвищити «інтонацію» звучання всієї фрази.

Для знаходження і заміни за шаблоном використовуємо «традиційну» для регулярок функцію — preg_replace(). «Накатати» регулярний вираз теж можна за пару секунд. При цьому (на перший погляд) можна обійтися без екранування символів PHP. Але тільки на перший PHP регулярні вирази екранування – особливості реалізації .

PHP регулярні вирази екранування – особливості реалізації

Ух ти! А це що за частокіл посеред поля? І кого це підштовхнуло його «нагородити»? Нас і попало. І все тому, що не врахували особливостей синтаксису. Подивимося на шаблон ближче: /./

Начебто все правильно: треба шукати в тексті точку. Але в PHP точка – це не тільки знак, але і метасимвол. Якщо правильно прочитати шаблон, то в ньому зазначено, що потрібно шукати будь-який символ і замінити його на той, який переданий preg_replace() в якості другого аргументу.

Ось тут і стане в нагоді екранування. З його допомогою ми вкажемо інтерпретатору мови, що слід шукати саме точку. Таким же чином потрібно екранувати слеші в PHP, оскільки вони теж є спеціальними символами. Ось правильний варіант шаблону:

PHP регулярні вирази екранування – особливості реалізації

Інші варіанти застосування

Як видно з попереднього прикладу, для екранування використовується зворотна коса риска. Але вона застосовується не тільки в регулярках. Наприклад, PHP екранування лапок теж затребуване. Особливо при використанні функцій для виводу тексту на екран:

PHP регулярні вирази екранування – особливості реалізації

А ось як в PHP екрануються змінні:

Або за допомогою конкатенації рядків, для якої використовується крапка:

Результат буде однаковим (попередній знімок). До речі, в цих прикладах зустрічається PHP екранування рядка. Для цього використовуються подвійні або одинарні лапки.

Ось ще приклад з цієї ж «опери»:

“;
echo stripcslashes($str);
?>

PHP регулярні вирази екранування – особливості реалізації

Тут з PHP прибираємо екранування за допомогою функції stripcslashes().Тепер ми вміємо не тільки додавати слеші, але і видаляти їх. Думаю, туман трохи розсіявся, і можна йти вперед. До наступної зустрічі у світі PHP!