有没有在应用之前,可以逃脱正则表达式模式的PHP函数?有没有在应用之前,可以逃脱正则表达式模式的PH

2019-05-06 11:04发布

有没有在应用之前,可以逃脱正则表达式模式的PHP函数?

我在寻找沿着C#线的东西Regex.Escape()函数。

Answer 1:

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 "
// }


文章来源: Is there a PHP function that can escape regex patterns before they are applied?