php正则表达式转义特殊字符[重复]

Posted

技术标签:

【中文标题】php正则表达式转义特殊字符[重复]【英文标题】:php regex escaping special characters [duplicate] 【发布时间】:2013-02-25 09:12:00 【问题描述】:

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

【问题讨论】:

定义“特殊”字符。你知道,所有角色都有自己的特殊之处。 :) 【参考方案1】:

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

虽然&lt;&gt; 可以充当delimiter,但在给定的示例中不需要对其进行转义,因为您已经将/(斜杠)充当delimiter。

参考相关链接

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

【讨论】:

【参考方案2】:

&lt;&gt; 在大多数上下文中不是元字符。

但是它们被用于:

命名捕获组(?P&lt;name&gt;) 回顾断言(?&lt;=...)

这就是为什么preg_quote 会小心翼翼地逃脱它们。这可以说是多余的,因为转义 (? 就足够了。但它也不痛。

【讨论】:

以上是关于php正则表达式转义特殊字符[重复]的主要内容,如果未能解决你的问题,请参考以下文章

正则表达式中必须转义哪些特殊字符?

正则表达式中必须转义哪些特殊字符?

PHP 正则表达式

正则表达式仅匹配未转义的特殊字符

使用php和正则表达式从字符串中删除数字和特殊字符[重复]

PHP正则表达式的使用