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

12

我写了下面的代码(它确实可以工作),想知道为什么在模式内部不需要转义'<'和'>'字符,因为它们在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>"

定义“特殊”字符。每个字符都有自己的特殊之处,你知道的。 :) - tchrist
2个回答

22

在 PHP 正则匹配/替换中,只有此页面上列出的字符需要进行转义。

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

参考上述链接

preg_quote()函数可用于将字符串进行转义以注入到模式中,并且其可选的第二个参数可用于指定需转义的定界符。


3

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

但是它们用作以下内容的元字符:

  • 命名捕获组(?P<name>)
  • 先行断言(?<=...)

这就是为什么preg_quote会对它们进行转义。这可能有些多余,因为转义(?就足够了。但这也没坏处。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接