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

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

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

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

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

<?php
$txt = "Точка - это не просто точка, а метасимвол. Это нужно знать.";
$str = preg_replace("/./","!", $txt);
echo $str;
?>

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

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

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

Фреймворк YII2. Быстрая разработка с современным PHP фреймворком

Узнай тонкости современной веб-разработки с помощью фреймворка YII2

Узнать подробнее

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

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

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

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

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

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

<?php
$str="Выделим \"слово\" двойными кавычками";
echo $str;
?>

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

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

<?php
$a="\"слово\"";
$str="Выделим $a двойными кавычками";
echo $str;
?>

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

<?php
$a="\"слово\"";
$str="Выделим ".$a."двойными кавычками";
echo $str;
?>

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

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

<?php
$str="Знак переноса на другую строку \\n - это он";
echo $str."<br />";
echo stripcslashes($str);

?>

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

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

Фреймворк YII2. Быстрая разработка с современным PHP фреймворком

Узнай тонкости современной веб-разработки с помощью фреймворка YII2

Узнать подробнее
Самые свежие новости IT и веб-разработки на нашем Telegram-канале

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

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

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

Метки:

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

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

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

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

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

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

Я не робот.

Spam Protection by WP-SpamFree