php正则表达式逃避特殊字符

时间:2013-03-10 00:19:17

标签: php regex

我写了下面的代码(是的,确实有效),并想知道为什么我不需要逃避'<'和'>'模式中的字符,因为它们被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>"

2 个答案:

答案 0 :(得分:16)

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

虽然<>可以充当delimiter,但在给定的示例中不需要对其进行转义,因为您已经将/(斜杠)视为一个delimiter

参考相关链接

  

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

答案 1 :(得分:3)

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

然而,它们用于:

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

这就是为什么preg_quote能够安全地逃脱它们的原因。它可以说是多余的,因为转义(?就足够了。但它也没有伤害。