Подтвердить что ты не робот

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

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

Я ищу что-то по строкам функции С# Regex.Escape().

4b9b3361

Ответ 1

preg_quote() - это то, что вы ищете:

Описание

string preg_quote ( string $str [, string $delimiter = NULL ] )

preg_quote() принимает str и ставит обратная косая черта перед каждым символом что является частью регулярного выражения синтаксис. Это полезно, если у вас есть строка времени выполнения, которую нужно сопоставить в некотором тексте, и строка может содержат специальные символы регулярных выражений.

Специальное регулярное выражение символы: . \ + * ? [ ^ ] $ ( ) { } = ! < > | : -

Параметры

ул

Входная строка.

Разделитель

Если задан дополнительный разделитель, он также будет экранирован. Это полезно для устранения разделителя, который требуется для функций PCRE./Является наиболее часто используемым разделителем.

Обратите внимание, что если аргумент $delimiter не указан, delimiter - символ, используемый для приложения вашего регулярного выражения, обычно передняя косая черта (/) - не будет экранирована. Обычно вам нужно передать любой разделитель, который вы используете с вашим регулярным выражением, в качестве аргумента $delimiter.

Пример - используя preg_match для поиска вхождений заданного URL-адреса, окруженного пробелами:

$url = 'http://stackoverflow.com/questions?sort=newest';

// preg_quote escapes the dot, question mark and equals sign in the URL (by
// default) as well as all the forward slashes (because we pass '/' as the
// $delimiter argument).
$escapedUrl = preg_quote($url, '/');

// We enclose our regex in '/' characters here - the same delimiter we passed
// to preg_quote
$regex = '/\s' . $escapedUrl . '\s/';
// $regex is now:  /\shttp\:\/\/stackoverflow\.com\/questions\?sort\=newest\s/

$haystack = "Bla bla http://stackoverflow.com/questions?sort=newest bla bla";
preg_match($regex, $haystack, $matches);

var_dump($matches);
// array(1) {
//   [0]=>
//   string(48) " http://stackoverflow.com/questions?sort=newest "
// }

Ответ 2

Было бы гораздо безопаснее использовать готовые шаблоны из библиотеки T-Regx:

$url = 'http://stackoverflow.com/questions?sort=newest';

$pattern = Pattern::prepare(['\s', [$url], '\s']);
                                // ↑ $url is quoted

затем выполните нормальное совпадение t-regx:

$haystack = "Bla bla http://stackoverflow.com/questions?sort=newest bla bla";

$matches = $pattern->match($haystack)->all;