戻る

Go言語正規表現解説

Nov 14, 2020

コンピューターにとっての文字列は人間にとっての視覚情報に相当する. 視覚情報から欲しい情報を探すことは人間が自然にやっているプロセスだが, コンピューターは正規表現で文字列を探し出し抽出する操作を定義しなくてはならない.

逆引きGolang (正規表現) が参考になる.

Goでは文字列は""と``を使い, シングルクォートの''はrune(UTF8文字)を表すことに注意しよう. ""通常の文字列, ''は特殊文字を一切解釈しない未加工文字列リテラルだ.

まず, 目的が置換ならregexpパッケージを使うよりもstring.Replacerを使う方がずっと早いと言われているが, あまり機能がないので結局regexpを使うことが多いと思う.

マッチしているかの判定のみ


import "regexp"

r := regexp.MustComtile(`abc`)
fmt.Println(r.MatchString("hello")) // false
fmt.Println(r.MatchString("hello abc")) // true

rは正規表現であり, MatchString("")でどの文字列から探すのかを指定する.

マッチした文字列を抽出する.

テキスト中のマッチした文字列を置換する.

例:テキストからURLにマッチさせる. 参考: 正規表現まとめ + メールアドレスとURLの正規表現例


package main

import (
	"fmt"
	"regexp"
)

func main() {
  text := "AAA https://zaief.jp BBB正規表現のテスト"

  re := regexp.MustCompile(`http(s)?://([\w-]+\.)+[\w-]+(/[\w-+;./?%&=~]*)?`)
	fmt.Printf("Pattern: %v\n", re.String()) // print pattern
	fmt.Println(re.MatchString(text)) // true
	linktagtext := re.ReplaceAllString(text, "<a href=${0}>${0}</a>")
  fmt.Println(linktagtext)

}