正则表达式用Go编程语言查找命名的捕获组

我正在寻找一个正则表达式来查找(其他)正则表达式字符串中的命名捕获组。

例子:我想找到(?P<country>m((a|b).+)n)(?P<city>.+)(?P<street>(5|6). .+)在以下正则表达式中:

/(?P<country>m((a|b).+)n)/(?P<city>.+)/(?P<street>(5|6). .+)

我尝试了以下正则表达式来查找指定的捕获组:

var subGroups string = `((.+))*?`
var prefixedSubGroups string = `.+` + subGroups
var postfixedSubGroups string = subGroups + `.+`
var surroundedSubGroups string = `.+` + subGroups + `.+`
var capturingGroupNameRegex *regexp.RichRegexp = regexp.MustCompile(
    `(?U)` + 
    `(?P<.+>` + 
    `(` +   prefixedSubGroups + `|` + postfixedSubGroups + `|` + surroundedSubGroups + `)` + 
    `)`) 

?U使贪婪量词( +* )非贪婪,而非贪婪量词( *? )贪婪。 Go正则表达式文档中的详细信息。

但它不起作用,因为括号没有正确匹配。


使用正则表达式正确匹配任意嵌套括号是不可能的,因为任意(递归)嵌套不能用常规语言描述。

一些现代正则表达式支持递归(Perl,PCRE)或平衡匹配(.NET),但Go不是其中之一(文档明确指出Perl的(?R)构造不被RE2库支持,Go的regex包似乎是基于)。 您需要构建递归下降解析器,而不是正则表达式。

链接地址: http://www.djcxy.com/p/74823.html

上一篇: Regex to find named capturing groups with Go programming language

下一篇: Regex with named capture groups getting all matches in Ruby