處理遵循特定模式的字串時,捕獲重複群組可能是一項常見任務。在 Go 中,正規表示式是實現此目的的強大工具。
考慮以下問題:解析由大寫單字後面跟著零個或多個用雙引號引起來的參數組成的字串。目標是提取命令(大寫單字)和參數(帶引號的字串)。
一個常見的錯誤是使用正規表示式,例如:
re1, _ := regexp.Compile(`([A-Z] )(?: "([^"] )")*`)
此正規表示式僅捕獲字串中的最後一個參數。修改表達式以允許捕獲多組參數:
re1, _ := regexp.Compile(`([A-Z] )|(?: "([^"] )")`)
現在,要提取命令和參數,請使用FindAllStringSubmatch 函數以及經過適當修改的正規表示式:
results := re1.FindAllStringSubmatch(`COPY "filename one" "filename two"`, -1)
此正規表示式捕獲組為:
最後,迭代覆蓋結果並將命令與參數分開:
fmt.Println("Command:", results[0][1])
for _, arg := range results[1:] {
fmt.Println("Arg:", arg[2])
}
透過解決正規表示式的缺點,您可以有效地擷取 Go 程式碼中的重複群組。
免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。
Copyright© 2022 湘ICP备2022001581号-3