我正在尋找一個正則表達式,以在(其他)正則表達式字符串中找到命名的捕獲組。例如:我想找到(?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 = `.+` + subGroupsvar postfixedSubGroups string = subGroups + `.+`var surroundedSubGroups string = `.+` + subGroups + `.+`var capturingGroupNameRegex *regexp.RichRegexp = regexp.MustCompile( `(?U)` + `\(\?P<.+>` + `(` + prefixedSubGroups + `|` + postfixedSubGroups + `|` + surroundedSubGroups + `)` + `\)`) ?U使貪婪量詞(+和*)變得非貪婪,并使非貪婪量詞(*?)變得貪婪。Go正則表達式文檔中的詳細信息。但這不起作用,因為括號未正確匹配。
1 回答

千巷貓影
TA貢獻1829條經(jīng)驗 獲得超7個贊
正則表達式無法正確匹配任意嵌套的括號,因為任意(遞歸)嵌套都不能用正則語言描述。
一些現(xiàn)代的regex樣式確實支持遞歸(Perl,PCRE)或平衡匹配(.NET),但Go并不是其中之一(文檔明確指出,Go的regex軟件包所基于(?R)
的RE2庫不支持Perl的構(gòu)造。上)。您需要構(gòu)建遞歸下降解析器,而不是正則表達式。
- 1 回答
- 0 關(guān)注
- 347 瀏覽
添加回答
舉報
0/150
提交
取消