首頁 > 後端開發 > Golang > 如何在 Go 中捕捉正規表示式中的多個重複組?

如何在 Go 中捕捉正規表示式中的多個重複組?

Barbara Streisand
發布: 2024-10-29 06:29:02
原創
895 人瀏覽過

How to Capture Multiple Repeating Groups in Regular Expressions in Go?

在 Go 中捕獲重複群組

使用遵循特定模式的字串時,捕獲重複群組可能是一項常見任務。在 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>
登入後複製

此正規表示式捕獲組是:

  • 組1: 指令(大寫單字)
  • 第2 組: 每個參數(雙引號字串)

迭代結果

最後,迭代結果並將指令與參數分開:

<code class="go">fmt.Println("Command:", results[0][1])
for _, arg := range results[1:] {
    fmt.Println("Arg:", arg[2])
}</code>
登入後複製

透過解決正規表示式的缺點,您可以有效地捕捉Go 程式碼中的重複群組。

以上是如何在 Go 中捕捉正規表示式中的多個重複組?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板