首頁 > 後端開發 > Golang > 如何使用 Go 有效率地尋找字串中的重疊匹配項?

如何使用 Go 有效率地尋找字串中的重疊匹配項?

Patricia Arquette
發布: 2024-12-22 03:55:11
原創
184 人瀏覽過

How Can I Efficiently Find Overlapping Matches in a String Using Go?

Golang 中的重疊模式匹配:一個簡單的解決方案

雖然Go 的regexp 套件提供了強大的模式匹配功能,但它本身缺乏對重疊的支援匹配。為了解決這個問題,利用 strings.Index 函數的簡單有效的方法提供了更合適的解決方案。

考慮以下程式碼:

input := "...#...#....#.....#..#..#..#......."
idx := []int{}
j := 0
for {
    i := strings.Index(input[j:], "..#..")
    if i == -1 {
        break
    }
    fmt.Println(j)
    idx = append(idx, j+i)
    j += i+1
}
fmt.Println("Indexes:", idx)
登入後複製

在此程式碼段中,變數輸入儲存目標字串。我們初始化一個名為 idx 的空整數切片來儲存輸入字串中模式匹配的起始索引。 j 變數追蹤搜尋中的目前位置。

解決方案的核心在於 for 迴圈。我們重複呼叫 strings.Index 來搜尋模式“.#..”。傳回值 i 表示從索引 j 開始的模式的第一次出現。如果 i 不是 -1,我們就找到了一個符合項,並將其起始索引 (j i) 記錄在 idx 切片中。然後,我們將 j 加 i 1,將搜尋移到匹配項後面的字元。

循環繼續此過程,直到找不到更多匹配項。然後,我們取得輸入字串中「.#..」所有重疊匹配的起始索引清單。

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

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