ChatGPT解决这个技术问题 Extra ChatGPT

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

正则表达式中的点 . 匹配任何单个字符。为了使正则表达式匹配一个点,该点必须被转义:\.

It has been pointed out to me 方括号 [] 内的点不必转义。例如,表达式:[.]{3} 将匹配 ... 字符串。

不是吗,真的吗?如果是这样,所有正则表达式标准都是如此吗?

是的,确实 DOT(和大多数其他特殊字符)不需要在字符类中转义。
正则表达式语法没有“标准”。
@BoltClock 有一些:posix,posix 扩展,perl。请参阅en.wikipedia.org/wiki/Regular_expression#Standards
值得注意的是,即使不需要,现代正则表达式也可以让您转义任何符号,因此您可以在不确定时转义。只有当您的目标是超级简洁的单行字时,或者您的表达式有太多斜线而影响可读性时,才真正需要担心简洁性。随着时间的推移,你自然会学会如何写得更干净。有时,当您不断地转义 (? 之类的内容时,它实际上会使事情更容易阅读,这样一目了然您就可以看到“这是一个文字”,而无需考虑该标记所在的上下文(尤其是与任何疯狂的嵌套)。
假设您正在设计一个正则表达式引擎并面临字符类中的句点是否必须转义的问题。这样做的唯一原因是允许字符类中的非转义句点表示匹配任何字符的元字符 .。但是等等,匹配任何字符的字符类有什么用?

M
MrWhite

在字符类(方括号)中,除 ^-]\ 之外的任何字符都是文字。

这个网站是一个很好的参考,有很多关于不同正则表达式的细微差别的信息。 http://www.regular-expressions.info/refcharclass.html


这实际上取决于语言如何处理它,但对于大多数语言来说都是如此。
如果 - 是最后一个值,它也是字面量
如果它不是第一个字符,则 ^ 是文字
如果 $ 看起来像一个变量,它也需要被转义。例如:[$.]
@kimbo 是的,如果 - 是字符类中的第一个或最后一个字符,则不需要转义。