我知道这里有很多问题,问为什么他们的正则表达式失败了,但我看不出Go / Golang的具体内容。
我有一个ID类型,它是一个字符串,其中添加了一些方法:type ID string
,如果ID有效,该函数应该返回一个bool。
我的有效性标准是:
因此,我在几个不同的在线工具上测试的正则表达式为/[A-Z0-9]{20}/
但每次运行validate函数时,无论输入如何,都会返回false。具体来说,regexp.MatchString()
函数返回false和nil。
下面是我的验证函数,即使我将正则表达式更改为/.{20}/
,该匹配也始终为false,该func (this ID) validate() bool {
regexString := "/[A-Z0-9]{" + strconv.Itoa(MAX_ID_LENGTH) + "}/"
fmt.Println(regexString)
thisStr := this.ToString()
fmt.Println(thisStr)
charCount := utf8.RuneCountInString(thisStr)
fmt.Println(charCount)
thisStr = strings.ToUpper(thisStr)
fmt.Println(thisStr)
match, err := regexp.MatchString(regexString, thisStr)
fmt.Println(match, err)
//Check string length is correct and matches regex.
if charCount != MAX_ID_LENGTH || !match {
return false
} else {
return true
}
}
应该与任何内容匹配20。
{{1}}
是否与我使用该功能的方式有关?我很难过。
注意: .ToUpper()函数在那里,因为当我的ID生成时,它们只生成大写字母和0-9,但我希望“abc”被视为“ ABC“如果以后手动输入。
答案 0 :(得分:4)
Go正则表达式不应包含/
个字符。删除它们,看看是否有效。
创建regular expression literals时,某些语言(例如javascript和ruby)中使用/
个字符,因为\
字符在正则表达式中经常使用,并且在常规时需要双重转义串。它只是一些语言的便利,但通常不是实际的正则表达式语法的一部分(尽管每种语言处理正则表达式有点不同)。
Go语言不支持正则表达式文字,但它确实具有string literals的概念,这使得编写复杂的正则表达式变得更加容易。
因此,例如,要查找字符串\.hidden-file-009
,您可以将表达式编写为:
"\\\\\\.[a-zA-Z0-9\\-_]*"
或更简单地说:
`\\\.[a-zA-Z0-9\-_]*`