【Golang】標準パッケージ regex

Golangの基礎学習〜Webアプリケーション作成までの学習を終えたので、復習を兼ねてまとめていく。 基礎〜応用まで。

package main
//regex 正規表現
//URLなどによって処理を分岐させたい場合など、判定してプログラムを書くなど

import (
    "fmt"
    "regexp"
)

func main() {
    //MatchString
    //正規表現のフォーマットに沿った文字列か確認し、True/Falseを返す
    //aからはじまってeで終わる。間はa-zが1つ以上。数字も使う場合はa-z0-9にする。
    match, _ := regexp.MatchString("a([a-z]+)e", "apple")
    fmt.Println(match)
    //>>true



    //MustCompile
    //上記と同じ。何度も使う場合は、最初に定義を宣言して使った方がいい
    r := regexp.MustCompile("a([a-z]+)e")
    ms := r.MatchString("apple")
    fmt.Println(ms)
    //>>true



    //FindString
    //MustCompileの中でURIを正規表現で定義し、FindStringで、そのルールに収まっているか確認をするという使い方もできる。
    //^ $ 先頭 終わりが数字アルファベット 空白を持たない
    r2 := regexp.MustCompile("^/(index|detail|create)/([a-zA-Z0-9]+)$")
    ///index/testに、マッチする文字列を取得する
    fs := r2.FindString("/index/test")
    fmt.Println(fs)
    //>>/index/test



    //FindStringSubmatch
    //格納されるデータはスライスで入っているので、一つ一つ取り出すことも可能。
    //indexだけ取り出したいなど
    //スライスで取得される
    fss := r2.FindStringSubmatch("/index/test")
    fmt.Println(fss, fss[0], fss[1], fss[2], len(fss))
    //>>[/index/test index test] /index/test index test 3
    //スライスで取り出せる


    //改行がある場合を検知する場合^ $ではなく、\A \zを使う
    //セキュリティ上望ましい。
    r3:= regexp.MustCompile(`\A/(index|detail|create)/([a-zA-Z0-9]+)\z`)
    fs3 := r3.FindString("/index/test")
    fmt.Println(fs3)//len(fs3)
}