我将一个图书馆从
Ruby移植到Go,刚刚发现
Ruby中的正则表达式与Go(google RE2)不兼容.我注意到Ruby& Java(加上其他语言使用PCRE正则表达式(perl兼容,支持捕获组)),所以我需要重写我的表达式,以便它们在Go中编译好.
例如,我有以下正则表达式:
`(?<Year>\d{4})-(?<Month>\d{2})-(?<Day>\d{2})`
这应该接受如下输入:
2001-01-20
捕获组允许年,月和日被捕获到变量中.要获得每个组的价值,这很容易;您只需使用组名索引到返回的匹配数据,并返回值.所以,例如去年,这样的伪代码:
m=expression.Match("2001-01-20") year = m["Year"]
这是我在表达式中使用的一种模式,所以我有很多重写要做.
那么,有没有办法在Go regexp中获得这种功能?我应该如何重写这些表达式?
how should I re-write these expressions?
(?P<Year>\d{4})-(?P<Month>\d{2})-(?P<Day>\d{2})
并使用as follows:
package main import ( "fmt" "regexp" ) func main() { r := regexp.MustCompile(`(?P<Year>\d{4})-(?P<Month>\d{2})-(?P<Day>\d{2})`) fmt.Printf("%#v\n",r.FindStringSubmatch(`2015-05-27`)) }