【golang】regexpパッケージの使い方

Go言語は、標準パッケージである「regexp」パッケージを通じて正規表現をサポートしています。このパッケージを使うことで、文字列の検索、置換、分割などの操作を簡単に実現することができます。

基本的な正規表現の構文

正規表現は、パターンと呼ばれる文字列で構成されています。パターンは、文字、特殊文字、メタ文字、制御文字などを含むことができます。以下は、よく使用される正規表現の構文について説明します。

文字

正規表現のパターンには、文字を含めることができます。例えば、文字列 “hello” を検索するには、次のような正規表現を使用します。

hello

特殊文字

正規表現では、特定の文字を検索するための特殊文字を使用することができます。以下は、よく使用される特殊文字の一覧です。

  • . : 任意の1文字と一致します。
  • * : 直前の文字が0回以上繰り返されることを示します。
  • + : 直前の文字が1回以上繰り返されることを示します。
  • ? : 直前の文字が0回または1回現れることを示します。
  • | : パターンを “または” の条件で複数指定できます。
  • [] : 指定された文字のいずれか1文字に一致します。
  • [^] : 指定された文字以外の1文字に一致します。
  • \ : 特殊文字をエスケープするために使用します。

メタ文字

正規表現では、文字クラスやグループなどの構文要素を使用することができます。以下は、よく使用されるメタ文字の一覧です。

  • () : グループを表します。
  • \d : 数字に一致します。
  • \D : 数字以外の1文字に一致します。
  • \s : 空白文字に一致します。
  • \S : 空白文字以外の1文字に一致します。
  • \w : アルファベット、数字、アンダースコアのいずれか1文字に一致します。
  • \W : アルファベット、数字、アンダースコア以外の1文字に一致します。

regexpパッケージの使用方法

regexpパッケージを使用するには、まず、以下の手順に従います。

  1. regexpパッケージをインポートします。
import "regexp"
  1. 正規表現をコンパイルします。
re, err := regexp.Compile(pattern)
  1. 正規表現を使って文字列を検索、置換、分割などの操作を実行します。

文字列の検索

文字列内で正規表現に一致する部分を検索するには、regexpパッケージのFindString関数を使用します。

match := re.FindString(text)

FindString関数は、最初にマッチした文字列を返します。もし一致する文字列がない場合、nilを返します。

if match != nil {
    // match found
} else {
    // no match found
}

文字列内で正規表現に一致するすべての部分を検索するには、FindAllString関数を使用します。

matches := re.FindAllString(text, -1)

FindAllString関数の第2引数に-1を指定することで、すべてのマッチを返します。

文字列の置換

文字列内の正規表現に一致する部分を置換するには、regexpパッケージのReplaceAllString関数を使用します。

result := re.ReplaceAllString(text, replacement)

ReplaceAllString関数は、マッチしたすべての文字列を置換します。

文字列の分割

文字列を正規表現に一致する部分で分割するには、regexpパッケージのSplit関数を使用します。

parts := re.Split(text, -1)

Split関数の第2引数に-1を指定することで、すべての分割箇所で分割します。

正規表現にマッチするかどうかのチェック

文字列が正規表現に一致するかどうかをチェックするには、regexpパッケージのMatchString関数を使用します。

match := re.MatchString(text)

MatchString関数は、文字列が正規表現に一致する場合にtrueを、一致しない場合にfalseを返します。

以下は、regexpパッケージを使用して文字列を検索する例です。

package main

import (
    "fmt"
    "regexp"
)

func main() {
    text := "Hello, World!"
    pattern := "Hello"

    re, err := regexp.Compile(pattern)
    if err != nil {
        fmt.Println("error:", err)
        return
    }

    match := re.FindString(text)
    if match != nil {
        fmt.Println("match found:", match)
    }
}

以上の例では、"Hello"というパターンで正規表現をコンパイルし、FindString関数を使用してtext文字列内でパターンに一致する文字列を検索しています。もし一致する文字列があれば、その文字列を出力します。

まとめ

Golangのregexpパッケージを使用することで、正規表現を使った文字列操作が可能になります。正規表現をコンパイルし、FindStringFindAllStringReplaceAllStringSplitMatchStringなどの関数を使用することで、文字列の検索、置換、分割、正規表現にマッチするかどうかのチェックが簡単に行えます。正規表現を使うことで、文字列の処理がより柔軟かつ効率的になります。