ホームページ > バックエンド開発 > Golang > Go 正規表現で名前付きキャプチャ グループをシミュレートするにはどうすればよいですか?

Go 正規表現で名前付きキャプチャ グループをシミュレートするにはどうすればよいですか?

Barbara Streisand
リリース: 2024-12-19 11:08:17
オリジナル
487 人が閲覧しました

How to Simulate Named Capturing Groups in Go Regular Expressions?

Go 正規表現でキャプチャ グループをエミュレートする方法

キャプチャをサポートする PCRE 互換の正規表現を使用する Ruby や Java とは対照的にグループでは、Go は Google の RE2 ライブラリを採用していますが、この機能はネイティブには提供されていません。この記事では、Go で同様の効果を実現する方法について説明します。

グループをキャプチャする次の Ruby 正規表現を考えてみましょう:

(?<Year>\d{4})-(?<Month>\d{2})-(?<Day>\d{2})
ログイン後にコピー

このパターンは、「2001-01-20」のような日付文字列と一致します。そして、年、月、日の値を、["年"] などの名前を介してアクセスできる名前付きグループにキャプチャします。

これをエミュレートするにはGo の動作では、グループ名をキャプチャするには「P」プレフィックスを追加する必要があります:

(?P<Year>\d{4})-(?P<Month>\d{2})-(?P<Day>\d{2})
ログイン後にコピー

たとえば、次の Go コードは、この変更されたパターンを利用する方法を示しています:

package main

import (
    "fmt"
    "regexp"
)

func main() {
    r := regexp.MustCompile(`(?P<Year>\d{4})-(?P<Month>\d{2})-(?P<Day>\d{2})`)
    fmt.Printf("%#v\n", r.FindStringSubmatch(`2015-05-27`))
    fmt.Printf("%#v\n", r.SubexpNames())
}
ログイン後にコピー

FindStringSubmatch 関数はキャプチャされたグループを返しますが、SubexpNames はキャプチャ グループの名前を提供し、その値にアクセスできるようにします。

"P" プレフィックスを使用してグループ名をキャプチャし、SubexpNames 関数を利用すると、Go の RE2 ライブラリを使用するときに Ruby の正規表現でグループをキャプチャする機能をエミュレートできます。

以上がGo 正規表現で名前付きキャプチャ グループをシミュレートするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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