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