我正在将一个库从 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 中获得这种功能;我应该如何重写这些表达式?
我应该如何重写这些表达式?
根据定义添加一些 Phere http://golang.org/pkg/regexp/syntax/:
(?P<Year>\d{4})-(?P<Month>\d{2})-(?P<Day>\d{2})
交叉引用捕获组名称re.SubexpNames()
.
And use 如下 https://play.golang.org/p/8LtH7lj1S7S:
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())
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)