首頁 >後端開發 >Golang >如何有效率地尋找 Go 字串中的所有正規表示式匹配項?

如何有效率地尋找 Go 字串中的所有正規表示式匹配項?

Barbara Streisand
Barbara Streisand原創
2024-12-21 09:32:21464瀏覽

How to Efficiently Find All Regex Matches in a Go String?

在Go 中使用正規表示式來找出符合

使用Go 時,您可能會遇到需要使用正規表示式來符合字元串中的特定模式。以下是如何使用regexp 套件來完成此操作:

問題:

如何找到給定字串中指定正規表示式的所有匹配項並將它們作為數組?

範例:

考慮字串:「{city},{state} {zip}」。目標是傳回一個包含大括號括起來的所有子字串的陣列。

初始嘗試:

使用regexp 包,您可能已經嘗試過以下程式碼:

r := regexp.MustCompile("/({[^}]*})/")
matches := r.FindAllString("{city}, {state} {zip}", -1)

但是,此程式碼會傳回一個空切片,表示沒有匹配項找到。

解決方案:

要解決此問題,請考慮以下步驟:

  1. 刪除不必要的正規表示式分隔符號(例如/) .
  2. 使用原始字串文字來定義正規表示式模式,這允許您轉義帶有單一反斜線的元字元。
  3. 從正規表示式模式中刪除捕獲組以獲取不帶大括號的整個匹配字串。

對於所有匹配:

r := regexp.MustCompile(`{[^{}]*}`)
matches := r.FindAllString("{city}, {state} {zip}", -1)
fmt.Println(matches) // Prints: [{city}, {state}, {zip}]

對於捕獲的零件僅:

r := regexp.MustCompile(`{([^{}]*)}`)
matches := r.FindAllStringSubmatch("{city}, {state} {zip}", -1)
for _, v := range matches {
    fmt.Println(v[1]) // Prints: city, state, zip
}

以上是如何有效率地尋找 Go 字串中的所有正規表示式匹配項?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn