Golang正则表达式MatchString转义字符破折号

huangapple go评论78阅读模式
英文:

Golang Regex MatchString Escape Char Dash

问题

正则表达式中的破折号(-)的顺序是否重要?在下面的情况中,validID1没有在破折号(-)之前提到转义字符,因此测试用例失败。如果我在validID1中添加转义字符(^[abcd1234\-_.]$),那么测试用例将通过。而在validID2中,没有提供转义字符的情况下,测试用例也通过了。为什么会有这样的不同行为?

var validID1 = regexp.MustCompile(`^[abcd1234-_.]$`) // 没有提供转义字符
var validID2 = regexp.MustCompile(`^[abcd1234+-\/]$`) // 对(-)没有提供转义字符,但对(/)提供了转义字符

fmt.Println(validID1.MatchString("adc-")) // false
fmt.Println(validID2.MatchString("adc-")) // true
英文:

Does the sequence of dash (-) in regex matter. In case below cases, validID1 no escape char mentioned before dash (-) and test case failed. If I add escape char in validID1 ((^[abcd1234\-_.]$)) then test case passed.
Where as in validID2 with out providing escaper char test case passed. Why it is behaving differently.

var validID1 = regexp.MustCompile(`^[abcd1234-_.]$`) //  No escape is provided
var validID2 = regexp.MustCompile(`^[abcd1234+-\/]$`) // No escape is provided for(-) but provided for (/)

fmt.Println(validID1.MatchString("adc-")) // false
fmt.Println(validID2.MatchString("adc-")) // true

答案1

得分: 3

翻译结果如下:

在类(用方括号 [..] 表示)中的破折号 - 是一个特殊的元字符(在类的内部)。它们表示一个字符范围,即从 from charto char

如果你想要它作为一个字面上的破折号,你需要对它进行转义 \-,或者将它放在类的开头或结尾,以消除歧义。

所以在你的例子中,这些类所匹配的内容如下:

[abcd1234-_.] 匹配 .123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_abcd

[abcd1234+-/] 匹配 +,-./1234abcd

在类的外部,破折号没有特殊的元字符含义。

英文:

The Dash - inside a class (denoted by square brackets [..]) is a special metacharacter
(inside of classes). They represent a range of characters where = from char - to char

If you want it to be a literal Dash, you'd have to escape it \- or put it at the beginning or
end of the class which removes the ambiguity.

So in your examples this is what those classes match

[abcd1234-_.] matches .123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_abcd

[abcd1234+-/] matches +,-./1234abcd

Outside of a class, a dash has no special metacharacter meaning.

huangapple
  • 本文由 发表于 2023年3月7日 04:15:58
  • 转载请务必保留本文链接:https://go.coder-hub.com/75655443.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定