Golang での重複パターン マッチング: 総合ガイド
正規表現パッケージの制限を考慮すると、重複するパターンのマッチングは Go で課題となる可能性があります。この記事では、文字列のシンプルさと効率性を利用した代替アプローチについて詳しく掘り下げます。インデックスを使用して、重複するパターン マッチングを効果的に実現します。
問題:
文字列と「..#..」などのパターンでは、重複に関係なく、パターンのすべてのインスタンスを見つけることを目指します。既存の regexp.FindAllStringSubmatchIndex メソッドは、重複しない一致のみをキャプチャします。
解決策:
正規表現に依存する代わりに、strings.Index と 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 中国語 Web サイトの他の関連記事を参照してください。