我正在将库从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中获得这种功能?我应该如何重写这些表达式?
我应该如何重写这些表达式?
添加一些诗篇,如定义在这里:
(?P<Year>\d{4})-(?P<Month>\d{2})-(?P<Day>\d{2})
使用交叉引用捕获组名称re.SubexpNames()。
re.SubexpNames()
并使用如下:
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`)) fmt.Printf("%#v\n", r.SubexpNames()) }