Go での重複パターン マッチング
Go では、正規表現を使用して重複パターンをマッチングするのが難しい場合があります。 FindAllStringSubmatchIndex メソッドは、重複しない一致には便利ですが、重複するパターンを扱う場合には不十分です。
代替アプローチ
正規表現のみに依存するのではなく、 strings.Index 関数と for ループを使用する、よりシンプルで効率的なソリューションを採用できます。このアプローチは、入力文字列内の位置に関係なく、重複するパターンの出現をすべて識別する簡単な方法を提供します。
コード例
次のコード スニペットは、これを示しています。代替アプローチ:
import ( "fmt" "strings" ) func main() { input := "...#...#....#.....#..#..#..#......." idx := []int{} j := 0 for { i := strings.Index(input[j:], "..#..") if i == -1 { break } idx = append(idx, j+i) j += i + 1 } fmt.Println("Indexes:", idx) }
このコードでは、Index 関数を使用して、入力文字列内でパターン「..#..」を検索します。位置「j」から。一致が見つかると、一致する位置のインデックスが idx スライスに追加され、「j」が「i 1」ずつ増分され、一致後の次の文字に検索が移動します。
結果
実行すると、コードは次の出力を出力します:
1 10 16 22 Indexes: [1 10 16 22]
この出力は正しく出力されます。入力文字列内で重複する「..#..」パターンをすべて識別します。
結論
正規表現は、次のようなパターン マッチングの強力なツールとなり得ます。多くのシナリオでは、パターンが重複する場合には最適なオプションではない可能性があります。文字列操作の単純さと効率を活用することで、複雑な正規表現解析を行わずに、このような問題を効果的に解決できます。
以上がGo 文字列内で重複するパターン一致をすべて効率的に見つけるにはどうすればよいでしょうか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。