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(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(r.FindAllStringSubmatchIndex(
"peach punch pinch", -1))
|
第二引数に非負整数を渡すと、マッチの数に上限を設ける。 |
fmt.Println(r.FindAllString("peach punch pinch", 2))
|
これまで見た例は文字列を引数に取り、 |
fmt.Println(r.Match([]byte("peach")))
|
正規表現の定数を作るときは、 |
r = regexp.MustCompile("p([a-z]+)ch")
fmt.Println(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
[0 5]
[peach ea]
[0 5 1 3]
[peach punch pinch]
[[0 5 1 3] [6 11 7 9] [12 17 13 15]]
[peach punch]
true
p([a-z]+)ch
a <fruit>
a PEACH
|
|
Go の正規表現の完全なリファレンスは |
次の例:JSON