ホームページ > バックエンド開発 > Golang > Go で重複するパターン一致をすべて効率的に見つけるにはどうすればよいですか?

Go で重複するパターン一致をすべて効率的に見つけるにはどうすればよいですか?

Patricia Arquette
リリース: 2024-12-04 10:04:10
オリジナル
791 人が閲覧しました

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

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 サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート