Есть ли функция PHP, которая может избежать шаблонов регулярных выражений до их применения?
Я ищу что-то по строкам функции C # Regex.Escape()
.
preg_quote()
– это то, что вы ищете:
Описание
string preg_quote ( string $str [, string $delimiter = NULL ] )
preg_quote () принимает
str
и помещает обратную косую черту перед каждым символом, который является частью синтаксиса регулярных выражений. Это полезно, если у вас есть строка времени выполнения, которую нужно сопоставить в некотором тексте, и строка может содержать специальные символы регулярных выражений.Специальные символы регулярного выражения:.
. \ + * ? [ ^ ] $ ( ) { } = ! < > | : -
параметры
ул
Входная строка.
ограничитель
Если задан опциональный разделитель, он также будет экранирован. Это полезно для устранения разделителя, который требуется для функций PCRE. / Является наиболее часто используемым разделителем.
Важно отметить, что если аргумент $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 " // }