在正则表达式的字符类(方括号)中,点号是否需要转义?

158

正则表达式中的点号.匹配任意单个字符。为了让正则表达式匹配点号,必须对点号进行转义:\.

有人指出在方括号[]内部,点号不需要转义。例如,表达式:[.]{3}将匹配...字符串。

真的吗?如果是这样,那么是否所有的正则表达式标准都适用呢?


是的,DOT(以及大多数其他特殊字符)在字符类中不需要转义。 - anubhava
5
正则表达式语法没有“标准”。 - BoltClock
11
@BoltClock,这里有几种正则表达式的标准:posix,posix扩展和perl。请参见http://en.wikipedia.org/wiki/Regular_expression#Standards - Dariusz
值得注意的是,现代正则表达式允许您转义任何符号,即使不需要,因此当您不确定时,可以只转义一些内容。只有在您的目标是超级简洁的一行代码或者您的表达式有太多斜杠以至于影响可读性时,才真正需要关注简洁性。随着时间的推移,您自然会学会如何编写更清晰的代码。有时,如果您始终转义诸如 (? 等内容,则实际上会使阅读变得更容易,因为一眼就可以看到“这是一个字面量”,而无需考虑该令牌所在的上下文(尤其是在任何疯狂的嵌套中)。 - Beejor
假设您正在设计一个正则表达式引擎,并面临一个问题,即字符类中的句点是否必须转义。这样做的唯一原因是允许字符类中的非转义句点表示元字符“.”,该元字符匹配任何字符。但是,请问,匹配任何字符的字符类有什么用处呢? - Cary Swoveland
1个回答

214

7
这很大程度上取决于语言如何处理,但对于大多数语言来说,这是正确的。 - Patrick Oscity
56
如果“-”是最后一个值,它也是字面意义上的。 - Pedro Lobito
26
如果^不是第一个字符,则它是字面上的。 - user2493235
1
有人知道这个在所有浏览器中是否一致支持吗? - YakovL
2
@kimbo 是的,在字符类内部,如果“-”是第一个或最后一个字符,则无需转义。 - Pedro Lobito
显示剩余7条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接