azAZ在正则表达式中的含义是什么?

ire*_*don 31 regex go

我一直在和别人的代码一起工作,我遇到了正则表达式[^0-9a-z-A-Z].这与[^0-9a-zA-Z]用于排除非字母数字字符的常见内容非常相似,但请注意中间的额外短划线,小写字母z和大写字母之间A.

我对正则表达式不太熟悉,但我现在已经阅读了几个页面,而且我看到的规则似乎都没有涵盖这种语法的含义.也许它甚至不是有效的语法,但Golang正则表达式解释器似乎并不介意.我很感激任何澄清.谢谢.

Boa*_*ann 52

在无法将其解释为范围的位置中的字符类中的破折号被解释为文字破折号.因此,表达式将字符排除为0to 9,ato z,Ato Z-.这就是没有语法错误的原因.

这可能是一个错字.如果破折号应该在那里,那么为了防止混淆,它应该从范围之间转义和/或移出,例如[^0-9a-zA-Z\-]

  • 在正常的POSIX 1003.2正则表达式中,破折号包含在括号表达式中,方法是将其作为范围的第一个或最后一个字符或第二个端点.另外****最重要的是**'\'字符在括号表达式中失去了所有特殊含义! (3认同)
  • @GregA.Woods:快速浏览文档告诉我Go使用Perl语法,可能是通过PCRE库.如果正如标签所暗示的那样在Go中使用此正则表达式,则反斜杠将*始终*被视为转义字符. (3认同)