← 学習トップに戻る

🔍 正規表現

文字列のパターンマッチング・検索・置換に使う表現法。grep / sed / JavaScript / Python などほぼ全ての言語で使える。

📌 基本メタ文字

記号意味
.任意の1文字(改行除く)a.c → abc, aXc
*直前の要素を0回以上繰り返しab* → a, ab, abb
+直前の要素を1回以上繰り返しab+ → ab, abb
?直前の要素を0または1回colou?r → color, colour
^行の先頭^hello
$行の末尾end$
[...]文字クラス(いずれか1文字)[aeiou]
[^...]否定文字クラス[^0-9]
{n,m}n〜m回繰り返し\d{3,4}
|OR(選択)cat|dog

📌 文字クラス(エスケープ)

記号意味
\d数字 [0-9]
\D数字以外
\w英数字・アンダースコア [a-zA-Z0-9_]
\W\w 以外
\s空白文字(スペース・タブ・改行)
\S空白以外
\b単語境界
\B単語境界以外

📌 グループと後方参照

記号意味
(...)キャプチャグループ
(?:...)非キャプチャグループ
\1, \2後方参照(1番目・2番目グループ)
(?<name>...)名前付きキャプチャ
(?=...)肯定先読み
(?!...)否定先読み
(?<=...)肯定後読み
(?<!...)否定後読み

💡 実用パターン集

# メールアドレス検証
[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}

# 日本の電話番号
0\d{1,4}-\d{1,4}-\d{4}

# 日付 (YYYY-MM-DD)
\d{4}-(?:0[1-9]|1[0-2])-(?:0[1-9]|[12]\d|3[01])

# URLの抽出
https?://[^\s"'<>]+

# IPアドレス
(?:\d{1,3}\.){3}\d{1,3}

# 郵便番号 (日本)
\d{3}-?\d{4}

💡 JavaScript での使い方

// テスト (true/false)
const re = /^\d{3}-\d{4}$/;
re.test('123-4567');  // true

// マッチ抽出
'2024-01-15'.match(/(\d{4})-(\d{2})-(\d{2})/);
// ['2024-01-15', '2024', '01', '15']

// 置換
'hello world'.replace(/\b\w/g, c => c.toUpperCase());
// 'Hello World'

// 全マッチ取得
const matches = [...'a1 b2 c3'.matchAll(/([a-z])(\d)/g)];

💡 grep / sed での使い方

# grep: パターンにマッチする行を表示
grep -E '\d{4}-\d{2}-\d{2}' log.txt

# grep: マッチしない行を表示 (-v)
grep -v '^#' config.txt

# sed: 置換 (g=全置換)
sed 's/foo/bar/g' file.txt

# sed: 後方参照で日付フォーマット変換
sed 's/\([0-9]\{4\}\)\/\([0-9]\{2\}\)/\1-\2/g' file.txt

🔗 参考リンク