我写了下面的代码(是的,确实有效),并想知道为什么我不需要逃避'<'和'>'模式中的字符,因为它们被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>"
答案 0 :(得分:16)
只有this page上列出的字符需要在PHP正则表达式匹配/替换中进行转义。
虽然<
和>
可以充当delimiter,但在给定的示例中不需要对其进行转义,因为您已经将/
(斜杠)视为一个delimiter。
参考相关链接
preg_quote()
函数可用于转义字符串以便注入模式,其可选的第二个参数可用于指定要转义的分隔符。
答案 1 :(得分:3)
<
和>
不是元字符是大多数情况。
然而,它们用于:
(?P<name>)
(?<=...)
这就是为什么preg_quote
能够安全地逃脱它们的原因。它可以说是多余的,因为转义(
和?
就足够了。但它也没有伤害。