我试图使用regexp与or运算符进行一些模式匹配,但我得到了一些奇怪的结果。我已经删除了除了基本要素之外的一切,以显示我的结果的问题。
这是我的代码:
package main
import "fmt"
import "regexp"
func main() {
authRegexp := regexp.MustCompile("^token=(llll|(.+))$")
matches := authRegexp.FindStringSubmatch("token=llll")
fmt.Println("MATCHES", matches, len(matches))
// MATCHES [token=llll llll ] 3
}
网址:http://play.golang.org/p/nLtWQQgveY
matches数组的长度为3,当我认为它的长度为2.最后一个值是一个空字符串。我不明白为什么会这样做。这是一个golang bug吗?我如何提交golang错误?
答案 0 :(得分:1)
最后一个空值对应(.+)
,只是表示此匹配组在匹配时未被“点击”。换句话说,它是完全合法的。在您的情况下,使用非捕获组是安全的:(?:.+)
- http://play.golang.org/p/MEkkoGqxho
答案 1 :(得分:0)