[Go] 正規表現のサブマッチ(キャプチャグループ)にマッチした文字列を得る

作成日: 2022年04月28日

regexp パッケージの FindAllStringSubmatch 関数を使用すると、正規表現のサブマッチ(キャプチャグループ)した文字列を全て取得することができます。FindAllStringSubmatch 関数の第 1 引数には検索対象とする文字列、第 2 引数にはマッチした結果をいくつ返すかを示す数値を渡します。ここでは、マッチした結果を全て返すように -1 を指定しています。関数の結果は 2 次元の文字列の配列が返されます。2 次元目の配列は、0 番目の要素にマッチした文字列、1 番目の要素にサブマッチした文字列が含まれています。

package main

import (
    "fmt"
    "regexp"
)

func main() {
    str := "abc adc aec"

    r := regexp.MustCompile(`a(.+?)c`)

    matches := r.FindAllStringSubmatch(str, -1)
    fmt.Println(matches)
}

実行結果

[[abc b] [adc d] [aec e]]
Go