Go 言語の正規表現に関する上級チュートリアル: グループ キャプチャの使用方法
正規表現はテキスト処理において非常に重要な役割を果たしており、Go 言語では regexp パッケージが標準ライブラリで提供されています。正規表現の一致と置換を処理します。前のチュートリアルでは、基本的な正規表現構文と、単純な一致および置換操作を実行する方法を学習しました。このチュートリアルでは、グループ キャプチャを使用して、一致結果のより柔軟な処理を容易にする方法をさらに紹介します。
package main import ( "fmt" "regexp" ) func main() { pattern := `(d{3})-(d{4})` text := "我的电话号码是123-4567,你的电话号码是987-6543。" re := regexp.MustCompile(pattern) result := re.FindAllStringSubmatch(text, -1) for _, match := range result { fmt.Println("完整匹配结果:", match[0]) fmt.Println("前三个数字:", match[1]) fmt.Println("后四个数字:", match[2]) } }
出力は次のようになります:
完整匹配结果: 123-4567 前三个数字: 123 后四个数字: 4567 完整匹配结果: 987-6543 前三个数字: 987 后四个数字: 6543
括弧を使用すると、簡単にグループ化できます。マッチング結果の各グループの内容を取得します。
(?P<name>pattern)
を使用すると、グループの名前 name
を指定できます。たとえば、最初の 3 つの数値と最後の 4 つの数値のグループ化の名前を次のように指定できます: package main import ( "fmt" "regexp" ) func main() { pattern := `(?P<area>d{3})-(?P<number>d{4})` text := "我的电话号码是123-4567,你的电话号码是987-6543。" re := regexp.MustCompile(pattern) result := re.FindAllStringSubmatch(text, -1) for _, match := range result { fmt.Println("完整匹配结果:", match[0]) fmt.Println("前三个数字:", match[1]) fmt.Println("后四个数字:", match[2]) fmt.Println("区号:", match[re.SubexpIndex("area")]) fmt.Println("号码:", match[re.SubexpIndex("number")]) } }
出力は次のようになります:
完整匹配结果: 123-4567 前三个数字: 123 后四个数字: 4567 区号: 123 号码: 4567 完整匹配结果: 987-6543 前三个数字: 987 后四个数字: 6543 区号: 987 号码: 6543
名前付きグループを使用すると、グループを番号または名前で参照できるだけでなく、コードがより読みやすく、保守しやすくなります。
概要
この記事では、Go 言語でグループキャプチャに正規表現を使用する方法を紹介します。括弧を使用してグループ化すると、マッチング結果の各グループの内容を簡単に取得できます。同時に、名前付きグループを使用してグループを参照し、コードを読みやすく保守しやすくする方法も学びました。このチュートリアルが正規表現のグループ キャプチャを理解するのに役立つことを願っています。
以上がGo 言語の正規表現に関する高度なチュートリアル: グループ化キャプチャの使用方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。