Go は、組み込みで 正規表現 をサポートしています。以下は、Go で正規表現を使う一般的な例です。 |
|
package main |
|
import ( "bytes" "fmt" "regexp" ) |
|
func main() { |
|
これは、パターンが文字列にマッチするか判定します。 |
match, _ := regexp.MatchString("p([a-z]+)ch", "peach") fmt.Println(match) |
上の例では文字列パターンを直接使いましたが、
他の正規表現タスクでも使うためには、 |
r, _ := regexp.Compile("p([a-z]+)ch") |
この構造体では、多くのメソッドが利用できます。 最初に見たような、マッチの判定は次の通りです。 |
fmt.Println(r.MatchString("peach")) |
正規表現にマッチする部分の検索は次の通りです。 |
fmt.Println(r.FindString("peach punch")) |
これも最初にマッチする部分を検索しますが、文字列の代わりに、 開始および終了インデックスを返します。 |
fmt.Println("idx:", r.FindStringIndex("peach punch")) |
|
fmt.Println(r.FindStringSubmatch("peach punch")) |
同様に、次の例はサブマッチした部分のインデックスも返します。 |
fmt.Println(r.FindStringSubmatchIndex("peach punch")) |
|
fmt.Println(r.FindAllString("peach punch pinch", -1)) |
同様に、前述した他の関数にも |
fmt.Println("all:", r.FindAllStringSubmatchIndex( "peach punch pinch", -1)) |
これらの関数の第 2 引数に非負の整数を与えると、 マッチする数を制限できます。 |
fmt.Println(r.FindAllString("peach punch pinch", 2)) |
これまでの例では、文字列型の引数をもち、 |
fmt.Println(r.Match([]byte("peach"))) |
正規表現のグローバル変数を作る場合は、 |
r = regexp.MustCompile("p([a-z]+)ch") fmt.Println("regexp:", r) |
|
fmt.Println(r.ReplaceAllString("a peach", "<fruit>")) |
|
in := []byte("a peach") out := r.ReplaceAllFunc(in, bytes.ToUpper) fmt.Println(string(out)) } |
$ go run regular-expressions.go true true peach idx: [0 5] [peach ea] [0 5 1 3] [peach punch pinch] all: [[0 5 1 3] [6 11 7 9] [12 17 13 15]] [peach punch] true regexp: p([a-z]+)ch a <fruit> a PEACH |
|
Go の正規表現の完全なリファレンスは、 |
Next example: JSON.