为了账号安全,请及时绑定邮箱和手机立即绑定

为什么我的正则表达式在 Go 中总是失败?

为什么我的正则表达式在 Go 中总是失败?

Go
吃鸡游戏 2021-09-27 16:12:35
我知道这里有很多问题询问为什么他们的正则表达式失败,但我看不到任何专门针对 Go/Golang 的问题。我有一个 ID 类型,它是一个带有一些方法的字符串:type ID string,如果 ID 有效,这个函数应该返回一个布尔值。我的有效性标准是:20 个字符长。任何大写字母 AZ。任何数字 0-9。所以我在几个不同的在线工具上测试过的正则表达式是 /[A-Z0-9]{20}/但是每次我运行我的验证函数时,无论输入如何,它都会返回 false。具体来说,该regexp.MatchString()函数返回 false 和 nil。下面是我的验证函数,匹配总是假的,即使我将正则表达式更改/.{20}/为应该匹配 20 个任何东西。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    }}是否与我使用该功能的方式有关?我难住了。注意: .ToUpper() 函数在那里,因为当我的 ID 生成时,它们只用大写字母和 0-9 生成,但如果以后手动输入,我希望“abc”被视为“ABC”。
查看完整描述

1 回答

?
噜噜哒

TA贡献1784条经验 获得超7个赞

Go 正则表达式不应被/字符包围。删除那些,看看是否有效。

/字符在某些语言中创建时(例如JavaScript和Ruby)使用正则表达式文字因为\字符正则表达式中经常使用的,并且需要双以规则的字符串时逸出。这在某些语言中只是一种方便,但通常不是实际正则表达式语法的一部分(尽管每种语言处理正则表达式的方式略有不同)。

Go 语言不支持正则表达式文字,但它确实有字符串文字的概念,这使得编写复杂的正则表达式变得更加容易。

因此,例如,要查找 string \.hidden-file-009,您可以将表达式写为:

"\\\\\\.[a-zA-Z0-9\\-_]*"

或者,更简单地说:

 `\\\.[a-zA-Z0-9\-_]*`


查看完整回答
反对 回复 2021-09-27
  • 1 回答
  • 0 关注
  • 280 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信