PHP регулярные выражения экранирование – особенности реализации

PHP регулярные выражения экранирование – особенности реализации

От автора: регулярки – это «мутная» тема! Там и точка может оказаться не точкой, а метасимволом. Да и с остальными знаками тоже все в тумане. И чтобы «заглянуть» за эту дымку, нужно в PHP регулярные выражения экранирование применить.

Почему все «мутно»?

В синтаксисе шаблонов, созданных с помощью регулярок, используются метасимволы. Вот, например, обычная точка. Это знак препинания, который ставится в конце предложения. Вроде бы ничего необычного! Но это до тех пор, пока вы не начнете применять ее в регулярных выражениях. Совсем запутались? Ну, тогда поясню, что такое PHP экранирование и как с ним «бороться» на примере:

Огласим задачу, которую должен выполнить приведенный выше пример. Есть строка, в которой нужно заменить все точки на восклицательный знак, чтобы повысить «интонацию» звучания всей фразы.

Бесплатный курс по PHP программированию

Освойте курс и создайте динамичный сайт на PHP и MySQL с полного нуля, используя модель MVC

В курсе 39 уроков | 15 часов видео | исходники для каждого урока

Получить курс сейчас!

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

PHP регулярные выражения экранирование – особенности реализации

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

Вроде бы все правильно: нужно искать в тексте точку. Но в PHP точка – это не только знак препинания, но и метасимвол. Если правильно прочитать шаблон, то в нем указано, что нужно искать любой символ и заменить его на тот, который передан preg_replace() в качестве второго аргумента.

Вот тут и пригодится экранирование. С его помощью мы укажем интерпретатору языка, что следует искать именно точку. Таким же образом нужно экранировать слеши в PHP, поскольку они тоже являются специальными символами. Вот правильный вариант шаблона:

PHP регулярные выражения экранирование – особенности реализации

Другие варианты применения

Как видно из предыдущего примера, для экранирования используется обратная косая черта. Но она применяется не только в регулярках. Например, в PHP экранирование кавычек тоже востребовано. Особенно при использовании функций для вывода текста на экран:

Бесплатный курс по PHP программированию

Освойте курс и создайте динамичный сайт на PHP и MySQL с полного нуля, используя модель MVC

В курсе 39 уроков | 15 часов видео | исходники для каждого урока

Получить курс сейчас!

PHP регулярные выражения экранирование – особенности реализации

А вот как в PHP экранируются переменные:

Или с помощью конкатенации строк, для которой используется точка:

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

Вот еще пример из этой же «оперы»:

PHP регулярные выражения экранирование – особенности реализации

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

Бесплатный курс по PHP программированию

Освойте курс и создайте динамичный сайт на PHP и MySQL с полного нуля, используя модель MVC

В курсе 39 уроков | 15 часов видео | исходники для каждого урока

Получить курс сейчас!

Хотите изучить регулярные выражения на PHP?

Прямо сейчас посмотрите 12-ти часовой курс по регулярным выражениям на PHP!

Смотреть курс

Метки:

Похожие статьи:

Комментарии Вконтакте:

Комментарии Facebook:

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Можно использовать следующие HTML-теги и атрибуты: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code class="" title="" data-url=""> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> <pre class="" title="" data-url=""> <span class="" title="" data-url="">

Я не робот.

Spam Protection by WP-SpamFree