我刚刚编写了一个与php函数一起使用的正则表达式preg_match,其中包含以下部分:
preg_match
[\w-.]
匹配任何单词字符,以及减号和点。虽然它似乎可以在preg_match中工作,但我尝试将其放入名为Reggy的实用程序中,并且它抱怨 “ char类的空范围” 。反复试验告诉我,这个问题已通过转义减号,将正则表达式转换为
[\w\-.]
由于原始版本似乎可以在PHP中运行,所以我想知道为什么还是应该转义减号,并且-因为点也是PHP中具有含义的字符- 为什么我不需要转义该点。我使用的实用程序是不是很愚蠢,是否与其他regex方言一起使用,还是我的regex真的不正确,我是否很幸运preg_match让我摆脱了它?
在许多正则表达式实现中,以下规则适用:
字符类中的元字符是:
^
-
]
\
所以这些都应该逃脱。但是,有些极端情况:
[abc-]
[-abc]
[a-c-abc]
[\w-abc]
[^a]
a
[a^]
[\^a]
[]]