使用遵循特定模式的字串時,捕獲重複群組可能是一項常見任務。在 Go 中,正規表示式是實現此目的的強大工具。
考慮以下問題:解析由大寫單字後面跟著零個或多個用雙引號引起來的參數組成的字串。目標是提取命令(大寫單字)和參數(帶引號的字串)。
常見的錯誤是使用如下正規表示式:
<code class="go">re1, _ := regexp.Compile(`([A-Z]+)(?: "([^"]+)")*`)</code>
此正規表示式僅捕獲字串中的最後一個參數。修改表達式以允許捕獲多組參數:
<code class="go">re1, _ := regexp.Compile(`([A-Z]+)|(?: "([^"]+)")`)</code>
現在,要提取命令和參數,請使用FindAllStringSubmatch 函數和經過適當修改的正則表達式:
<code class="go">results := re1.FindAllStringSubmatch(`COPY "filename one" "filename two"`, -1)</code>
此正規表示式捕獲組是:
最後,迭代結果並將指令與參數分開:
<code class="go">fmt.Println("Command:", results[0][1]) for _, arg := range results[1:] { fmt.Println("Arg:", arg[2]) }</code>
透過解決正規表示式的缺點,您可以有效地捕捉Go 程式碼中的重複群組。
以上是如何在 Go 中捕捉正規表示式中的多個重複組?的詳細內容。更多資訊請關注PHP中文網其他相關文章!