【发布时间】:2011-07-25 22:33:56
【问题描述】:
我刚刚编写了一个正则表达式,用于 php 函数 preg_match,其中包含以下部分:
[\w-.]
匹配任何单词字符,以及减号和点。虽然它似乎在 preg_match 中工作,但我尝试将它放入一个名为 Reggy 的实用程序中,它抱怨 “char 类中的空范围”。反复试验告诉我,这个问题是通过转义减号,将正则表达式变成
来解决的[\w\-.]
既然原来的似乎在 PHP 中工作,我想知道为什么我应该或不应该转义减号,并且 - 因为点也是 PHP 中具有含义的字符 - 为什么我不需要转义点。我正在使用的实用程序是不是很傻,它是在使用另一种正则表达式方言还是我的正则表达式真的不正确?我只是幸运 preg_match 让我侥幸逃脱了吗?
【问题讨论】:
-
有什么理由不使用
preg_quote? -
可能不会。但这不是我问这个问题的原因。我试图学习一些关于正则表达式的新知识,只是使用
preg_quote会产生完全相反的效果。 :)。我确实意识到我标记了这个 PHP,但我正在寻找一个可能适用于任何 PCRE 实现的答案。 -
我明白了。那么,我可以建议:github.com/php/php-src/blob/…
-
虽然它仍然没有“直接”告诉我什么和什么不应该逃避,以及为什么,但它确实提供了关于它的行为方式的所有答案。供参考,官方出处镜像:github.com/luvit/pcre2/tree/master/src