初めて学ぶ正規表現ガイド(頻出メタ文字の解説)

初めて学ぶ正規表現ガイド(頻出メタ文字の解説)

「正規表現」という言葉を聞いたことがありますか。
正規表現は、文字列の検索・置換・抽出に使える便利な記法です。

一度身につければ、プログラミングだけでなく、ファイル名の一括変更、大量テキストからの情報抽出など、文字データを扱う多くの場面で力を発揮します。普段は手作業で時間がかかる処理も、正規表現なら一瞬で片付くことがあります。

一方で、初見では記号の羅列に見えて難しく感じられるのも事実です。私は苦手でした。この記事では、基本の使い方から実務で役立つテクニックを紹介します。

正規表現とは

特に置換で大活躍

正規表現とは、文字列のパターンを一つの文字列として表現するための表記法です。これは、特定の文字や単語、あるいは特定の構造を持つ文字列を探し出したり、別の文字列に置き換えたりするために使われます。

メタ文字の解説

最初はホントに意味不明・・・

正規表現を扱うにあたり、メタ文字の学習は避けて通れません。メタ文字とは、正規表現で使われる特殊文字のことです。文字そのものではなく「任意の1文字(.)」や「行頭(^)」のような、特定の機能やパターンを表す役割を持ちます。ここでは、よく使うメタ文字を具体例を交えて解説します。

.(ドット:改行以外の任意1文字)

Sample
ra.n
解説:「r → a → 任意の1文字 → n」を表しています。
  • マッチする例:rain / ra3n / ra-n
  • マッチしない例:ran(1文字足りない)/ raiin(1文字多い)

*(アスタリスク:直前の文字の0回以上の繰り返し)

Sample
ra*n
解説:「r → aが0回以上 → n」を表しています。
  • マッチする例:rn (aが0回)/ ran (aが1回)/ raaaan (aが4回)
  • マッチしない例:rbn (a以外の文字は対象外)/ rain (aの繰り返しでもnでもない)

+(プラス:直前の文字の1回以上の繰り返し)

Sample
ra+n
解説:「r → aが1回以上 → n」を表しています。
  • マッチする例:ran (aが1回)/ raan (aが2回)/ raaaan (aが4回)
  • マッチしない例:rn(aが1回以上必要)/ rbn (a以外の文字は対象外)

[ ](角括弧:括弧内のいずれか1文字)

Sample
r[aiu]n
解説:「r → aかiかuのいずれか1文字 → n」を表しています。
  • マッチする例:ran / rin / run
  • マッチしない例:ren(eは括弧内にない)/ rn(1文字足りない)/ rain(角括弧内は1文字にしかマッチしないため)

参考:範囲指定 [a-c]at
aat / bat / cat に一致。

{ }(波括弧:直前の文字の回数を指定)

Sample
ra{2}n
解説:「r → aが2回 → n」を表しています。
  • マッチする例:raan
  • マッチしない例:ran(aが1回で足りない)/ raaaan(aが4回で多すぎる)

^(キャレット:行の先頭)

Sample
^cat
解説:「行の先頭 → c → a → t」を表しています。
  • マッチする例:cat and dog
  • マッチしない例:a black cat(行の先頭ではないため) / copycat(途中に cat はあるが先頭ではない)

$(ドル記号:行の末尾)

Sample
cat$
解説:「c → a → t → 行の末尾」を表しています。
  • マッチする例:a black cat / copycat
  • マッチしない例:cat and dog / scatter(行の末尾ではないため)

メタ文字を組み合わせて使う

メタ文字は、組み合わせて使うことができます。複数の機能を組み合わせることで、より高度で実用的な処理が可能になります。先程紹介したメタ文字を組み合わせた例を紹介します。

特定の単語の間に任意の文字列を挟む(".*")

Sample
cat.*dog
解説:「cat → 任意の文字列 → dog」を表します。この順序で現れる行にマッチします。
  • マッチする例:cat and dog / catdog / the cat chased the big dog
  • マッチしない例:dog and cat(順序が逆)/ a black cat(dogがない)

桁数と文字種を指定する("[ ]{ }")

Sample
^[0-9]{3}-[0-9]{4}$
解説:「行頭 → 数字3桁 → ハイフン → 数字4桁 → 行末」を表します。
  • マッチする例:135-0064 / 100-0001
  • マッチしない例:1234567(ハイフンがない)/ 12-3456(桁数が違う)/ 〒123-4567(記号を含む)

参考:携帯電話番号 0[7-9]0-[0-9]{4}-[0-9]{4}
070,080,090から始まり、数字4桁-数字4桁

行全体の完全一致を検証する ("^" と "$")

Sample
^い.*す$
解説:「行頭(^) → 「い」 → 任意の文字列(.*) → 「す」 → 行末($)」を表します。
  • マッチする例:いいおてんきです / いってきます / いぬはかわいいです
  • マッチしない例:はい、そうです(始まりが違う)/ いぬはかわいい(終わりが違う)

正規表現の作成・勉強に役立つツール

オンラインでサクッと検証できます

複雑な正規表現は、目視だけでは正しく記述できているかを確認するのが難しいため、ツールを活用するのがおすすめです。

私が利用しているのは、regex101というツールで、正規表現を「書く・試す・学ぶ」を一画面で完結できます。パターンにマッチした部分が色分け表示され、右側に自動解説(Explanation)が出るので、どの記号がどのように効いているかを視覚的に理解できます。

応用編:先読み(Lookahead)・後読み(Lookbehind )、そして、$1、$2、$3・・・

先読み・前方参照(Lookahead)

前方参照は「直後が〜なら(ならないなら)」という条件だけをチェックして、実際の一致範囲には含めない仕組みです。

Sample
[0-9]+(?=円)
解説:「円」の直前の数字だけを選択を表します。
  • マッチする例:合計1200円 の 1200
  • マッチしない例:1200ドル(直後が円でない)

後読み・後方参照(Lookahead)

後方参照は「直前が〜なら(ならないなら)」という条件だけをチェックし、実際の一致範囲には含めない仕組みです。

Sample
(?<=@)[A-Za-z0-9.-]+
解説:@マークの後ろの文字を抽出します
  • マッチする例:info@example.co.jp の example.co.jp
  • マッチしない例:https://example.co.jp(@がない)

前方参照・後方参照は一括置換で大活躍

前方参照・後方参照の使い道は、文字の置換です。「ここにだけ入れたい/変えたい」という指定ができるのが強み。指定した文字は、$1、$2、$3というキャプチャを使って表現します。

( )の中の文字が$1に入ります。( )が複数あれば、順番に$2、$3となります。

代表的な使用例

最後に具体的な使用例を紹介します。私が最も活用するのは、エディタでの文字整形ですね。

文字の検索・置換(一括編集)

例えば、日付がYYYY/MM/DD形式とYYYY年MM月DD日が混在している原稿を受理した際に、一括で「年月日」の記法に置換することができます。

.htaccess

ホームページに掲載しているコンテンツを削除・統合した際のリダイレクトルールは、正規表現を使えばシンプルな記述で完結できます。

プログラミング

入力したパスワードが条件をすべて満たすか検証する関数のサンプルコードです。

まとめ

正規表現は、決めたルールで文字を見つけたり置き換えたりするのに便利なノウハウです。この記事で紹介したメタ文字をだけでも広範囲を網羅します。うまくいくか不安なときは、regex101などのツールで確認しましょう。小さな例から試し、少しずつ広げていけば大丈夫です。

Author Profile

コウノ(
職歴年のIT技術者です。エクセル・Web制作が得意。

プロフィールの詳細

お困りごとはまずはご相談ください。パソコン・スマホ初期設定 / ツール導入・開発受付中

Back to Top