首頁 > 後端開發 > Golang > 如何在 Go 中有效地找到所有重疊的模式匹配?

如何在 Go 中有效地找到所有重疊的模式匹配?

Patricia Arquette
發布: 2024-12-04 10:04:10
原創
795 人瀏覽過

How Can I Efficiently Find All Overlapping Pattern Matches in Go?

Golang 中的重疊模式匹配:綜合指南

考慮到regexp 包的限制,匹配重疊模式可能會給Go 帶來挑戰。本文深入研究了一種替代方法,利用 strings.Index 的簡單性和高效性來有效實現重疊模式匹配。

問題:

給定一個字串和一個模式,例如“..#..”,我們的目標是找到該模式的所有實例,無論它們是否重疊。現有的 regexp.FindAllStringSubmatchIndex 方法僅捕獲非重疊匹配。

解決方案:

我們不依賴regexp,而是使用strings.Index 和建立自訂解決方案一個對於循環:

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

解釋:

此函數使用strings.Index 在輸入字串的剩餘部分中迭代搜尋模式。找到的每個正索引都會添加到索引列表中。循環繼續,直到找不到更多匹配項。

範例用法:

input := "...#...#....#.....#..#..#..#......."
pattern := "..#.."
result := FindOverlappingPattern(input, pattern)
// result: [1, 10, 16, 22, 29]
登入後複製

優點:

這種方法很簡單,並且利用了Go 的原生字串搜尋功能。對於簡單的模式比對任務,它在簡單性和效率方面都優於基於正規表示式的解決方案。

以上是如何在 Go 中有效地找到所有重疊的模式匹配?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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