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

时间:2015-04-02 14:45:40

标签: regex go

我知道这里有很多问题,问为什么他们的正则表达式失败了,但我看不出Go / Golang的具体内容。

我有一个ID类型,它是一个字符串,其中添加了一些方法:type ID string,如果ID有效,该函数应该返回一个bool。

我的有效性标准是:

  • 20个字符。
  • 任何大写字母A-Z。
  • 任意数字0-9。

因此,我在几个不同的在线工具上测试的正则表达式为/[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“如果以后手动输入。

1 个答案:

答案 0 :(得分:4)

Go正则表达式不应包含/个字符。删除它们,看看是否有效。

创建regular expression literals时,某些语言(例如javascript和ruby)中使用/个字符,因为\字符在正则表达式中经常使用,并且在常规时需要双重转义串。它只是一些语言的便利,但通常不是实际的正则表达式语法的一部分(尽管每种语言处理正则表达式有点不同)。

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

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

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

或更简单地说:

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