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

Go 文字列内のすべての正規表現一致を効率的に見つけるにはどうすればよいですか?

Barbara Streisand
リリース: 2024-12-21 09:32:21
オリジナル
467 人が閲覧しました

How to Efficiently Find All Regex Matches in a Go String?

Go で正規表現を使用して一致を検索

Go を使用する場合、正規表現を使用して文字列内の特定のパターンと一致させる必要が生じる場合があります。 regexp パッケージを使用してこれを実現する方法は次のとおりです。

質問:

指定された文字列内の指定された正規表現に一致するものをすべて見つけて、それらを文字列として返すにはどうすればよいですか? array?

例:

文字列: "{city}、{state} {zip}"。目標は、中括弧で囲まれたすべての部分文字列を含む配列を返すことです。

初期試行:

正規表現パッケージを使用して、次のコードを試したことがあるかもしれません:

r := regexp.MustCompile("/({[^}]*})/")
matches := r.FindAllString("{city}, {state} {zip}", -1)
ログイン後にコピー

ただし、このコードは空のスライスを返し、一致するものがなかったことを示します。

解決策:

この問題を解決するには、次の手順を検討してください:

  1. 不要な正規表現区切り文字 (/ など) を削除します。 .
  2. 生の文字列リテラルを使用して正規表現パターンを定義すると、次のことが可能になります。単一のバックスラッシュでメタ文字をエスケープします。
  3. 正規表現パターンからキャプチャ グループを削除して、中括弧なしで一致した文字列全体を取得します。

すべての一致の場合:

r := regexp.MustCompile(`{[^{}]*}`)
matches := r.FindAllString("{city}, {state} {zip}", -1)
fmt.Println(matches) // Prints: [{city}, {state}, {zip}]
ログイン後にコピー

キャプチャされたパーツの場合のみ:

r := regexp.MustCompile(`{([^{}]*)}`)
matches := r.FindAllStringSubmatch("{city}, {state} {zip}", -1)
for _, v := range matches {
    fmt.Println(v[1]) // Prints: city, state, zip
}
ログイン後にコピー

以上がGo 文字列内のすべての正規表現一致を効率的に見つけるにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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