簡體   English   中英

正則表達式使用Go編程語言查找命名捕獲組

[英]Regex to find named capturing groups with Go programming language

我正在尋找一個正則表達式來找到(其他)正則表達式字符串中的命名捕獲組。

示例:我想找到(?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不是其中之一( 文檔明確指出 ,Go的正則表達式包RE2庫不支持Perl的(?R)構造似乎是基於 )。 您需要構建遞歸下降解析器,而不是正則表達式。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM