Intereting Posts
Доступ к файлам сервера Wamp с помощью имени компьютера, установленного локального IP-адреса. Приложение Android получить доступ к приложению laravel из приложения Android с помощью токена csrf Найти самый старый файл в папке с помощью PHP Перевести функцию класса на лямбда-функцию Как зашифровать идентификатор сессии в cookie? невозможно передать массив из контроллера для просмотра в laravel CURL: отправка изображений с помощью границы в REST API Отправка данных сокетов с использованием значения ведущей длины Промывка документа HTML на ранней стадии – с помощью ini_set ('zlib.output_compression', 'ON')? Проверьте, не переданы ли какие-либо переменные в GET ограничить строку до первых 5 слов или первых 42 символов в PHP PHP – Итерация через папки и отображение содержимого HTML Как предотвратить подгрузку http-запросов, если содержимое является приватным? (в основном разрешают только запросы от моего интерфейса, а не от браузера) Как установить gettext на MacOS X Проблема с кодировкой URL-адреса страницы Laravel 5

Экранирующая строка для использования в регулярном выражении

Возможный дубликат:
Есть ли функция PHP, которая может избежать шаблонов регулярных выражений до их применения?

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

Например,

$text = 'm/z'; // this is the text I want to use as part of my regular expression $text_regexp = '#' . $text . '#i'; // this is my regular expression 

Даст

 $text_regexp = '#m/z#i'; 

Но я хотел бы получить следующее регулярное выражение:

 $text_regexp = '#m\/z#i'; 

Это надуманный пример, но я хотел просто проиллюстрировать точку.

preg_quote

Из руководства:

помещает обратную косую черту перед каждым символом, который является частью синтаксиса регулярных выражений

Вы также можете передать разделитель как второй параметр, и он также будет экранирован. Однако, если вы используете # качестве разделителя, тогда нет необходимости скрывать /

preg_quote (строка $ str [, строка $ delimiter = NULL])

http://php.net/manual/de/function.preg-quote.php

Все эти ответы верны, только меташары должны быть экранированы. Слишком плохо, что php не имеет оператора регулярных выражений, такого как preg_match ([operator] / $ var /), поэтому разделители могут быть агентом цитирования. Таким образом, делиметр не должен быть указан во внешнем $ var. (Perl имеет это с операторами m //, s /// или = ~)

Preg_quote – это хороший способ сделать это, к сожалению, иногда вам нужно сопоставить литерал '\ char', если он не экранирован, например, \ \ char, и избегать остальных. Не много вариантов с preg_quote ().

Вы могли бы буквально настроить свои собственные php-функции, которые цитируют меташары (или снимают цитату после preg_quote ()).

как заменить все /([ /([{}\[\]()^\$.|*+?\\<>$delim])/ \\$1 /([{}\[\]()^\$.|*+?\\<>$delim])/ \\$1 /([{}\[\]()^\$.|*+?\\<>$delim])/ с \\$1 или что-то в этом роде. Установите $ delim и / или вытащите, возможно, escape или любые другие метамарки, которые вы не хотите экранировать.

Просто мои $ 0,02

Проверьте это . Вы можете использовать preg_quote () ;.