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

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

Barbara Streisand
リリース: 2024-12-06 19:30:14
オリジナル
945 人が閲覧しました

How Can We Efficiently Find All Overlapping Pattern Matches in a Go String?

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

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