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中文網其他相關文章!