我正在寻找一个正则表达式来找到(其他)正则表达式字符串中的命名捕获组.
示例:我想查找(?P<country>m((a|b).+)n),(?P<city>.+)并(?P<street>(5|6)\. .+)在以下正则表达式中:
/(?P<country>m((a|b).+)n)/(?P<city>.+)/(?P<street>(5|6)\. .+)
Run Code Online (Sandbox Code Playgroud)
我尝试了以下正则表达式来查找命名的捕获组:
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 + `)` +
`\)`)
Run Code Online (Sandbox Code Playgroud)
?U使贪婪量词(+和*)非贪婪,非贪婪量词(*?)贪婪.Go正则表达式文档中的详细信息.
但它不起作用,因为括号不正确匹配.
正则表达式无法正确匹配任意嵌套的括号,因为常规语言无法描述任意(递归)嵌套.
一些现代的正则表达式风格确实支持递归(Perl,PCRE)或平衡匹配(.NET),但Go不是其中之一(文档明确指出,Go的正则表达式包似乎基于RE2库(?R)不支持Perl的构造on).您需要构建递归下降解析器,而不是正则表达式.
| 归档时间: |
|
| 查看次数: |
1647 次 |
| 最近记录: |