Go言語の正規表現処理入門!regexpパッケージで文字列操作を極める
生徒
「Goで文字列の特定のパターンを見つけたいときはどうすればいいですか?」
先生
「そのときに便利なのがregexpパッケージです。正規表現を使うと、文字列の中から条件に合う部分を簡単に探せます。」
生徒
「正規表現って難しそうですが、初心者でも使えますか?」
先生
「もちろんです。基本を押さえれば、Goでも簡単に使えます。まずは文字列検索から始めましょう。」
1. 正規表現とは?
正規表現とは、文字列のパターンを表現する方法です。例えば、「数字だけ」「メールアドレスの形式」「特定の単語が含まれる」などを簡単に判定できます。Goではregexpパッケージを使って正規表現を扱います。
2. regexpパッケージで文字列を検索する
Goで文字列の中に特定のパターンが含まれているか確認するには、MatchString関数を使います。例えば、文字列に数字が含まれているかをチェックする場合です。
package main
import (
"fmt"
"regexp"
)
func main() {
str := "電話番号は080-1234-5678です"
matched, _ := regexp.MatchString(`\d{3}-\d{4}-\d{4}`, str)
fmt.Println(matched)
}
true
この例では、\dは数字を表し、{3}や{4}はその桁数を指定しています。ハイフン付きの電話番号を簡単に判定できました。
3. 正規表現オブジェクトを使う
頻繁に使う正規表現は、一度コンパイルして再利用すると便利です。regexp.Compileを使うと、正規表現オブジェクトを作成できます。
package main
import (
"fmt"
"regexp"
)
func main() {
re, _ := regexp.Compile(`[a-zA-Z]+`)
str := "Go言語でRegexpを使う"
fmt.Println(re.FindString(str))
}
Go
この例では、最初に出現する英字の連続部分「Go」を抽出できました。FindStringは最初のマッチだけを返します。
4. 複数のマッチを抽出する
文字列中に複数のパターンがある場合は、FindAllStringを使います。
package main
import (
"fmt"
"regexp"
)
func main() {
re := regexp.MustCompile(`\d+`)
str := "商品番号123と456と789"
numbers := re.FindAllString(str, -1)
fmt.Println(numbers)
}
[123 456 789]
-1を指定すると全てのマッチを取得できます。数字だけをまとめて抽出できるので、データ処理に便利です。
5. 正規表現で文字列を置換する
文字列の置換もregexpで簡単にできます。ReplaceAllStringを使うと、マッチした部分を別の文字列に置き換えられます。
package main
import (
"fmt"
"regexp"
)
func main() {
re := regexp.MustCompile(`\d+`)
str := "電話番号080-1234-5678"
newStr := re.ReplaceAllString(str, "XXX")
fmt.Println(newStr)
}
電話番号XXX-XXXX-XXXX
このように、数字をマスクしたり、特定の文字列をまとめて置換する場合に便利です。
6. 正規表現を使うときのポイント
- 正規表現は強力ですが複雑になりすぎると読みにくくなります。
- 簡単なパターンから始めて、徐々に複雑な条件に対応するのがコツです。
- Goでは
regexp.MustCompileを使うとコンパイルエラー時にプログラムが停止するので、初心者はエラー確認しやすいです。
これらの基本を押さえれば、Go言語で文字列のパターン検索や置換がスムーズに行えます。