8

我编写了以下代码(是的,它确实有效)并且想知道为什么我不需要转义模式中的“<”和“>”字符,因为它们被 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>"
4

2 回答 2

18

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

虽然<and>可以充当delimiter,但在给定示例中不需要对其进行转义,因为您已经将/(slash) 作为delimiter

参考有问题的链接

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

于 2013-03-10T00:26:40.767 回答
3

<并且>不是元字符是大多数上下文。

然而,它们被用于:

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

所以这就是为什么要preg_quote安全并逃脱它们的原因。这可以说是多余的,因为逃避(并且?就足够了。但这也不痛。

于 2013-03-10T00:25:24.563 回答