如何在Go正则表达式中获取捕获组功能

我正在将库从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()

并使用如下:

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())

}

以上是 如何在Go正则表达式中获取捕获组功能 的全部内容, 来源链接: utcz.com/qa/399387.html

回到顶部