PHP正则表达式转义特殊字符


php regex escaping special characters

我编写了以下代码(是的,它确实有效),并且想知道为什么我不需要转义模式中的'<'和'>'字符,因为它们被php手册认为是'特殊'字符。

http://www.php.net/manual/en/function.preg-quote.php

var_dump(preg_match('/<[A-Za-z][A-Za-z0-9]*>/', "<html>", $matches));
echo "<pre>";
var_dump(htmlentities($matches[0]));
echo "</pre>";
输出:

int(1) 
string(12) "<html>"

只有本页列出的字符需要在PHP正则表达式匹配/替换中进行转义

虽然<>可以作为分隔符,但在给定的示例中不需要转义,因为您已经有/(斜杠)作为分隔符。

参考所讨论的链接

preg_quote() 函数可用于转义字符串以注入到模式中,其可选的第二个参数可用于指定要转义的分隔符。

<>在大多数情况下不是元字符。

但是它们在以下情况下使用:

  • 命名捕获组(?P<name>)
  • 查看断言的背后(?<=...)

所以这就是为什么preg_quote玩得很安全,逃离他们。这可以说是多余的,因为转义(?就足够了。但这也没什么坏处。