有没有一个PHP函数可以在应用正则表达式模式之前对其进行转义?
有没有一个PHP函数可以在应用正则表达式模式之前对其进行转义?
我正在寻找类似于C# Regex.Escape()
函数的东西。
有没有一个PHP函数可以在应用正则表达式模式之前对其进行转义?
我正在寻找类似于C# Regex.Escape()
函数的东西。
preg_quote()
是你要找的:
描述
string preg_quote ( string $str [, string $delimiter = NULL ] )
preg_quote() 采用
str
,并在作为正则表达式语法一部分的每个字符的前面放置一个反斜杠。如果您有一个运行时字符串,并且需要在某些文本中匹配,并且该字符串可能包含特殊的正则表达式字符,这将非常有用。特殊的正则表达式字符包括:
. \ + * ? [ ^ ] $ ( ) { } = ! < > | : -
参数
str
输入字符串。
定界符
如果指定了可选分隔符,则它也将被转义。这对于转义 PCRE 函数所需的分隔符非常有用。/ 是最常用的分隔符。
重要的是,请注意,如果未指定参数,则不会对分隔符(用于将正则表达式括起来的字符,通常是正斜杠 ())进行转义。您通常希望传递使用正则表达式作为参数的任何分隔符。$delimiter
/
$delimiter
preg_match
$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 "
// }
使用T-Regx的Ready Patterns会安全得多:
$url = 'http://stackoverflow.com/questions?sort=newest';
$pattern = Pattern::inject('\s@\s', [$url]);
// ↑ $url is quoted
然后执行正常匹配:
$haystack = "Bla bla http://stackoverflow.com/questions?sort=newest bla bla";
$matcher = pattern->match($haystack);
$matches = $match->all();
您甚至可以将其与以下功能一起使用:preg_match()
preg_match($pattern, 'foo', $matches);