Go言語 - 正規表現
日本語も一文字として認識してくれるみたい。
でも、文字の位置を返すメソッドはバイトスライスの位置なのでで注意。
package main import ( "fmt" "regexp" ) func main() { s := "aあbいcうdえeおf" // 正規表現にマッチするかの有無 fmt.Println(regexp.MatchString("あ.", s)) //-> true <nil> fmt.Println(regexp.MatchString("か.", s)) //-> false <nil> // 正規表現パターンのコンパイル re1 := regexp.MustCompile("..") re2 := regexp.MustCompile(".*") // マッチした文字列のスライスを返す fmt.Println(re1.FindAllString(s, -1)) //-> [aあ bい cう dえ eお] fmt.Println(re1.FindAllString(s, 2)) //-> [aあ bい] fmt.Println(re2.FindAllString(s, -1)) //-> [aあbいcうdえeおf] re3 := regexp.MustCompile(".(.)(.).") // [マッチした文字列, キャプチャ文字列1, ……]を要素とするスライスを返す fmt.Println(re3.FindAllStringSubmatch(s, -1)) //-> [[aあbい あ b] [cうdえ う d]] fmt.Println(re3.FindAllStringSubmatchIndex(s, -1)) //-> [[0 8 1 4 4 5] [8 16 9 12 12 13]] // マッチした要素のbyte列でのスライス値を表示 // 最初にマッチした文字列 fmt.Println(re1.FindString(s)) //-> [aあ] // マッチしない場合は空文字列""を返す。 // マッチした文字列を置換 fmt.Println(re3.ReplaceAllLiteralString(s, "$1")) //-> $1$1eおf $1は文字 fmt.Println(re3.ReplaceAllString(s, "$1")) //-> あうeおf $1は最初にキャプチャされた文字 fmt.Println(re3.ReplaceAllString(s, "$2")) //-> bdeおf $2は2番目にキャプチャされた文字 }