TL

正規表現

文字列のパターンを記号で表し、検索・抽出・置換を行うための小さな言語。メールやログの照合などに広く使われます。

基礎正規表現文字列処理テキスト最終更新: 2026-06-06
TL;DR要点だけ先に
  • 1.正規表現はテキストのパターンを記述する記法で、検索・抽出・置換に使えます。
  • 2.`.` や `*`、`\d` などのメタ文字を組み合わせて柔軟な照合を表現します。
  • 3.貪欲マッチや記号のエスケープ忘れが典型的な落とし穴で、意図とずれた結果を招きます。

正規表現とは

正規表現(regex)は、「数字3桁+ハイフン+数字4桁」のような文字列のパターンを、短い記号列で表す記法です。テキストの中からパターンに合う箇所を検索・抽出・置換でき、ほとんどのプログラミング言語やエディタで使えます。

  • 検索 — ログから IP アドレスらしい行を探す。
  • 抽出 — 文章からメールアドレスや日付を取り出す。
  • 置換 — 全角スペースを半角に、特定パターンを一括で書き換える。

ベタ書きの文字列一致と違い、「こういう形」というゆらぎを含む条件を1行で表せるのが強みです。

基本のメタ文字

通常の文字はそのまま一致しますが、特別な意味を持つ記号をメタ文字と呼びます。代表的なものを覚えると一気に読めるようになります。

記号意味
.任意の1文字a.cabca7c に一致
*直前の0回以上の繰り返しab*aabbb に一致
+直前の1回以上の繰り返しab+ababbb に一致
?直前が0回か1回(省略可)colou?rcolorcolour
\d数字1文字\d\d\d は3桁の数字
[ ]文字クラス(いずれか1文字)[aeiou] は母音1つ
^ $行頭・行末^abc$ は行全体が abc

たとえば郵便番号「123-4567」は \d{3}-\d{4} と書けます。{3} は「ちょうど3回」を表す量指定子です。

const zip = /\d{3}-\d{4}/;
zip.test("123-4567"); // true
"郵便番号は 100-0001 です".match(/\d{3}-\d{4}/)[0]; // "100-0001"

抽出と置換

グループ化 ( ) を使うと、一致した一部分を取り出して再利用できます。置換では、取り出した部分を $1 のような番号で参照できます。

// 「年-月-日」を「日/月/年」に並べ替える
const s = "2026-06-06";
s.replace(/(\d{4})-(\d{2})-(\d{2})/, "$3/$2/$1"); // "06/06/2026"
  • ( ) でくくった部分は左から $1, $2, … と番号が振られます。
  • 置換は「検索パターン」と「置換後の文字列」の2つを与えるのが基本形です。

貪欲マッチの罠

*+ は既定でできるだけ長く一致しようとします。これを貪欲(greedy)マッチと呼び、意図せず広い範囲を飲み込むことがあります。

貪欲マッチで広がりすぎる

<.*><b>太字</b> に当てると、最初の < から最後の > まで一気に一致し、<b>太字</b> 全体を飲み込みます。タグ1個だけ取りたいなら、*? のように ? を付けた控えめ(lazy)マッチ <.*?> を使い、最短で止めます。

"<b>太字</b>".match(/<.*>/)[0];  // "<b>太字</b>"(貪欲:全部)
"<b>太字</b>".match(/<.*?>/)[0]; // "<b>"(控えめ:最短)

エスケープの落とし穴

.(?\ などはメタ文字なので、文字そのものとして照合したいときはエスケープ(前に \ を付ける)が必要です。忘れると別の意味に解釈されます。

  • 「ドットそのもの」を表すには \. と書きます。. のままだと「任意の1文字」になります。
  • たとえば example.com を厳密に一致させたいなら example\.comexample.com のままだと examplexcom などにも一致します。
/example.com/.test("examplexcom"); // true(. が任意の1文字に化けている)
/example\.com/.test("examplexcom"); // false(ドットを文字として扱う)
まず日本語で条件を言語化

いきなり記号を並べず、「数字が3つ、ハイフン、数字が4つ」と日本語で条件を声に出してから記号へ翻訳すると、過不足に気づけます。完成後は想定外の文字列(空文字や極端に長い入力)でもテストしましょう。

まとめ

正規表現は、テキストのパターンを記号で表し、検索・抽出・置換を1行で行える便利な道具です。. * \d [ ] などのメタ文字を組み合わせるのが基本で、グループ ( ) を使えば一部の取り出しや置換もできます。実務でつまずきやすいのは、広く飲み込む貪欲マッチと、記号のエスケープ忘れ。この2点に注意すれば、最初の壁は越えられます。

プログラミング Article

正規表現を実務で読む

TL;DRは入口です。実際に選ぶ・使う段階では、何を解決するか、何と比較するか、導入後にどこで詰まるかまで見る必要があります。

解決すること

正規表現

比較で見る軸

難易度: basic / カテゴリ: プログラミング / タグ数: 3

導入後に効く点

`.` や `*`、`\d` などのメタ文字を組み合わせて柔軟な照合を表現します。

先に潰すリスク

用語だけ覚えても、設計・実装・運用でどこに効くかを確認しないと判断を誤る。

数字・仕様の読み方
難易度
basic
カテゴリ
プログラミング
タグ数
3

判断チェックリスト

  • 自社の用途が「正規表現 / 文字列処理」に近いか確認する。
  • 強みである「正規表現はテキストのパターンを記述する記法で、検索・抽出・置換に使えます。」が本当に評価軸になるか確認する。
  • 注意点の「用語だけ覚えても、設計・実装・運用でどこに効くかを確認しないと判断を誤る。」を運用で吸収できるか確認する。
  • 公開値や仕様値は、対象プラン・対象機種・対象リージョンまで確認する。
  • 既存システム、ID、ネットワーク、監視、バックアップとの接続方法を先に洗い出す。
  • 小さく試してから、本番移行、権限設計、障害時手順、コスト監視を決める。

次に確認する観点

正規表現文字列処理テキスト正規表現文字列処理テキスト
参考: 公式情報