Golang正则表达式在FindStringSubmatch中的问题

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

Golang regexp issue with FindStringSubmatch

问题

我试图使用正则表达式进行模式匹配,使用或运算符,但结果有些奇怪。我已经剥离了除了必要部分以展示我的结果问题。

这是我的代码:

  1. package main
  2. import "fmt"
  3. import "regexp"
  4. func main() {
  5. authRegexp := regexp.MustCompile("^token=(llll|(.+))$")
  6. matches := authRegexp.FindStringSubmatch("token=llll")
  7. fmt.Println("MATCHES", matches, len(matches))
  8. // MATCHES [token=llll llll ] 3
  9. }

链接:http://play.golang.org/p/nLtWQQgveY

matches数组的长度为3,我认为它应该是2。最后一个值是一个空字符串。我不明白为什么会这样。这是一个golang的bug吗?我该如何提交golang的bug报告?

英文:

I was trying to use regexp to do some pattern matching with the or operator but I got some odd results. I have stripped out everything but the essentials to show the problem with my result.

This is my code:

package main

  1. import "fmt"
  2. import "regexp"
  3. func main() {
  4. authRegexp := regexp.MustCompile("^token=(llll|(.+))$")
  5. matches := authRegexp.FindStringSubmatch("token=llll")
  6. fmt.Println("MATCHES", matches, len(matches))
  7. // MATCHES [token=llll llll ] 3
  8. }

Url: http://play.golang.org/p/nLtWQQgveY

The matches array has a length of 3, when I think it should have a length of 2. The last value is an empty string. I dont understand why it does this. Is this a golang bug? How do I submit golang bugs?

答案1

得分: 1

最后一个空值对应于(.+),只是表示在匹配过程中未命中该捕获组。换句话说,这是完全合法的。在你的情况下,使用非捕获组 (?:.+) 是安全的。

英文:

The last empty value corresponds to (.+) and just an indication that this capturing group was not 'hit' while matching. In other words, it is completely legitimate. In your case it will be safe to use non-capturing group instead: (?:.+) - http://play.golang.org/p/MEkkoGqxho

答案2

得分: 0

为什么不直接使用:

  1. ^token=(llll)$

demo

英文:

why no just use:

  1. ^token=(llll)$

demo

huangapple
  • 本文由 发表于 2015年7月28日 08:39:43
  • 转载请务必保留本文链接:https://go.coder-hub.com/31665634.html
匿名

发表评论

匿名网友

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

确定