見出し画像

golangで正規表現を使う方法【regexp】

今回はGo言語で正規表現を使う方法を紹介していきます。


正規表現

正規表現文字列のパターンを記述するための方法です。
特定のルールとシンボルを使って、文字列の複雑なパターンを表現してテキスト検索、置換、データの抽出など多くのテキスト処理で用いられています。


golangで正規表現を使う

Go言語で正規表現を扱うには、標準ライブラリのregexpパッケージを使用します。

regexpでは正規表現に関連する様々な機能が備わっています。
例えば、文字列が正規表現にマッチするかの検証、マッチする部分の抽出、文字列内のパターンの置換などがあります。


正規表現のコンパイル

まず、regexp.Compile()関数を使用して正規表現をコンパイルします。

r, err := regexp.Compile("正規表現")
if err != nil {
    log.Fatal(err)
}

コンパイルを行うことで正規表現のオブジェクトは、複数回使用することができます。そのため繰り返し処理の際にパフォーマンスの向上が見込めます。


文字列のマッチング

マッチするかどうかを確認するには、MatchString()メソッドを使用します。

matched := r.MatchString("対象の文字列")
fmt.Println(matched)


マッチする部分の抽出

マッチする部分を抽出するには、FindString()、もしくはFindStringSubmatch()などのメソッドを使用します。

match := r.FindString("対象の文字列")
fmt.Println(match) 

submatches := r.FindStringSubmatch("対象の文字列")
fmt.Println(submatches)


文字列内のパターンの置換

文字列内のパターンを別の文字列に置換するには、ReplaceAllString()メソッドを使用します。

replaced := r.ReplaceAllString("対象の文字列", "置換後の文字列")
fmt.Println(replaced)


正規表現の使用例

package main

import (
    "fmt"
    "log"
    "regexp"
)

func main() {
    r, err := regexp.Compile(`^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$`)
    if err != nil {
        log.Fatal(err)
    }

    fmt.Println(r.MatchString("example@example.com"))
    fmt.Println(r.MatchString("invalid-email")) 
}

上記コードでは正規表現を使用してメールアドレスの形式にマッチするかどうかを確認しています。


regexpの注意点

regexpパッケージは非常に便利な機能です。
しかし、正規表現主にパフォーマンス面で懸念されることがあるため、注意が必要です。

コンパイルのコスト

正規表現のコンパイルにはコストがかかります。
頻繁に正規表現を使う際は、グローバル変数等で一度コンパイルしておいて使いまわすのがおすすめです。


エスケープ処理

文字列リテラルの規則に従い、バックスラッシュ(\)はエスケープしなければ正規表現で使用することができません。
\を正規表現で使用する場合は、\\と書く必要があります。


特殊文字

正規表現における特殊文字(., *, +, ?, (, ), [, ], {, }, ^, $, |)は、その特殊文字としての意味を無効化したい場合はバックスラッシュと同様にエスケープする必要があります。


サブマッチ

FindStringSubmatch()メソッドを使うと、キャプチャグループのサブマッチも取得できます。

これメソッドを使うことで、複雑なパターンから抽出する際に便利です。


golangをもっと詳しくなりたい方に

初めてのGo言語

Go言語の入門から応用まではこの一冊で網羅されています。説明も順序立てて説明されており完成度の高い参考書となっています。


詳解Go言語Webアプリケーション開発

こちらはGo言語の基礎知識を得たあとに読むことをすすめる本となっています。ハンズオン形式で手を動かしながら実装をしていくことができるため、実際の開発を意識しながらGo言語を学ぶことができます。

以下の記事では他にも筆者が実際に読んでおすすめしたい本をまとめています。


【Go入門】Golang基礎入門 + 各種ライブラリ + 簡単なTodoWebアプリケーション開発(Go言語)

まだGo言語の勉強を始めていない方、全くの初心者の方にはこちらのUdemy教材が最もおすすめです。

この教材ではgolangの基礎について網羅的に学ぶことができます。ただ見て学ぶだけでなく、講座の中でアプリ作成まで行うことで学んだことの理解をさらに深めることができます。


現役シリコンバレーエンジニアが教えるGo入門 + 応用でビットコインのシストレFintechアプリの開発

個人的に最も勉強になったのは「現役シリコンバレーエンジニアが教えるGo入門 + 応用でビットコインのシストレFintechアプリの開発」という教材です。
本格的なレクチャーに入る前に、なぜGoなのか、なぜFintechなのかについて説明されていることで、Goの概念や意味について大枠から理解することができます。

以下の記事では筆者が実際に受講したおすすめUdemy教材をまとめています。

※本ページではアフィリエイトリンク(PR)が含まれています


この記事が参加している募集

#この経験に学べ

54,186件

この記事が気に入ったらサポートをしてみませんか?