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言語で文字列のパターン検索や置換がスムーズに行えます。
まとめ
Go言語と正規表現処理の振り返り
この記事では、Go言語における正規表現処理の基本から実践的な使い方までを段階的に学びました。 正規表現とは何かという基礎的な考え方から始まり、Go言語で標準的に利用できるregexpパッケージを使って、 文字列検索、文字列抽出、複数マッチの取得、そして文字列置換といった処理を丁寧に確認してきました。 正規表現は、文字列操作やデータ処理、入力チェック、ログ解析など、さまざまな場面で活躍する重要な技術です。
特にGo言語のregexpパッケージは、標準ライブラリとして提供されているため、追加のライブラリを導入することなく、 安定した正規表現処理を実装できる点が大きな特徴です。 MatchStringを使った単純なパターン判定から、CompileやMustCompileによる正規表現オブジェクトの再利用、 FindStringやFindAllStringによるデータ抽出、ReplaceAllStringによる文字列置換まで、 実務でよく使われる機能を一通り理解できたのではないでしょうか。
正規表現は一見すると難しく感じるかもしれませんが、数字の判定や英字の抽出といった身近な例から始めることで、 徐々に理解が深まります。 Go言語での正規表現処理を身につけることで、入力値チェックやデータ整形、ログデータの解析など、 プログラミングの幅が大きく広がります。 基本的な書き方と使いどころを押さえ、必要に応じて少しずつ表現を拡張していくことが大切です。
正規表現処理のサンプルプログラム再確認
ここでは、記事内で学んだ内容をまとめたシンプルなサンプルプログラムをもう一度確認します。 文字列の中から数字を抽出し、特定の形式にマッチするかを確認しつつ、不要な部分を置換する流れを一度に把握できます。
package main
import (
"fmt"
"regexp"
)
func main() {
text := "お問い合わせ先は090-1111-2222です。注文番号は123と456です。"
phoneRe := regexp.MustCompile(`\d{3}-\d{4}-\d{4}`)
fmt.Println(phoneRe.MatchString(text))
numberRe := regexp.MustCompile(`\d+`)
numbers := numberRe.FindAllString(text, -1)
fmt.Println(numbers)
masked := phoneRe.ReplaceAllString(text, "XXX-XXXX-XXXX")
fmt.Println(masked)
}
このように、Go言語のregexpパッケージを使えば、複数の正規表現処理を組み合わせて、 実用的な文字列操作を簡潔に記述できます。 正規表現オブジェクトを使い回すことで、処理の可読性や保守性も向上します。
生徒
「最初は正規表現が難しそうだと思っていましたが、Go言語のregexpパッケージを使うと、 意外とシンプルに文字列操作ができることが分かりました。」
先生
「そうですね。Go言語では標準ライブラリが充実しているので、 正規表現も特別な準備をせずにすぐ使えるのが強みです。」
生徒
「MatchStringで判定したり、FindAllStringでデータをまとめて取得したりできるのが便利だと感じました。 電話番号や数字の抽出は実務でも使えそうです。」
先生
「その通りです。入力チェックやデータ加工、ログ解析など、 正規表現が活躍する場面はたくさんあります。 まずは今回学んだ基本的なパターンをしっかり使いこなせるようにしましょう。」
生徒
「これからは、正規表現を使ってGo言語での文字列処理に自信を持って取り組めそうです。」
先生
「それが一番大切です。少しずつ経験を積みながら、 正規表現とGo言語の組み合わせを自分の武器にしていきましょう。」
【超入門】ゼロから始めるGo言語プログラミング:最速で「動くアプリ」を作るマンツーマン指導
「プログラミングの仕組み」が根本からわかる。Go言語でバックエンド開発の第一歩を。
本講座を受講することで、単なる文法の暗記ではなく、「プログラムがコンピュータの中でどう動いているか」という本質的な理解につながります。シンプルながら強力なGo言語(Golang)を通じて、現代のバックエンドエンジニアに求められる基礎体力を最短距離で身につけます。
具体的な開発内容と環境
【つくるもの】
ターミナル(黒い画面)上で動作する「対話型計算プログラム」や、データを整理して表示する「ミニ・ツール」をゼロから作成します。自分の書いたコードが形になる感動を体験してください。
【開発環境】
プロの現場でシェアNo.1のVisual Studio Code (VS Code)を使用します。インストールから日本語化、Go言語用の拡張機能設定まで、現場基準の環境を一緒に構築します。
この60分で得られる3つの理解
「なぜ動くのか」という設定の仕組みを理解し、今後の独学で詰まらない土台を作ります。
データの種類やメモリの概念など、他言語にも通じるプログラミングの本質を学びます。
ただ動くだけでなく、誰が見ても分かりやすい「綺麗なコード」を書くための考え方を伝授します。
※本講座は、将来的にバックエンドエンジニアやクラウドインフラに興味がある未経験者のためのエントリー講座です。マンツーマン形式により、あなたの理解度に合わせて進行します。
初めてのGo言語を一緒に学びましょう!