正規表現まとめ

概要

実務で安全かつ移植性高く使える正規表現リファレンス。 **フラグ構文(例:(?s),(?m),(?i)`)は使用せず**、OSやツール差に左右されにくい具体パターンのみを掲載。


改行コードと環境差

OS 改行コード 推奨パターン 要点
Windows \r\n \r?\n CRLF/LF両対応の最小公倍数
macOS / Linux \n \r?\n そのまま両対応可能

要点

  • 改行検出や置換は \r?\n を使えばWindows/macOS/Linuxを一括対応。
  • 改行を含むブロック抽出(?:.|\r|\n) を基本にする(.は改行に一致しないため)。

Part 1: 基本文法(カテゴリ別・簡潔表)

1-1. 文字クラスと範囲指定

構文 意味 入力例 マッチ結果
. 改行以外の任意1文字 a.c / abc abc
[abc] a・b・cのいずれか1文字 bag a
[^0-9] 数字以外の1文字 a1 a
[A-Z0-9] 英大文字または数字 X8z X,8

1-2. 量指定子(繰り返し)

構文 意味 入力例 マッチ結果
* 直前の文字を0回以上 goooogle goooo
+ 直前の文字を1回以上 google oo
? 直前の文字を0回または1回 color colour 両方一致
{n} ちょうどn回 a{3} / aaa aaa
{n,} n回以上 a{2,} / aaaa aaaa
{n,m} n〜m回 a{2,4} / aaaaa aaaa

1-3. 位置指定(アンカー)

構文 意味 入力例 マッチ結果
^abc 行頭のabc abc\nzabc 1行目abc
abc$ 行末のabc zabc\nabc 両行の末尾abc
\bword\b 単語境界のword word words word
\Bing 非単語境界のing ringing 後半ing

1-4. 特殊文字(略記)

構文 意味 入力例 マッチ結果
\d 数字 [0-9] ver2.10 2,10
\D 非数字 a1 a
\w 英数字・アンダースコア a_b-1 a_b
\W 非英数字 a# #
\s 空白類(空白/タブ/改行 等) a b 中間空白
\S 非空白 a b a,b
\t タブ a\tb a[TAB]b

1-5. 特殊記号とエスケープ

構文 意味 入力例 マッチ結果
\. ドットそのもの a.c a.c
\* アスタリスクそのもの a*b a*b
\+ プラス記号 a+b a+b
\? 疑問符そのもの what? what?
\( \) 括弧そのもの (test) (test)
| パイプ文字 `a b`
\\ バックスラッシュ C:\\path \\
\^ キャレット ^abc ^abc
\$ ドル記号 total$ $
\[ \] 角括弧そのもの [abc] [abc]
\{ \} 波括弧そのもの {a,b} {a,b}

Part 2: グルーピング・分岐・先読み/後読み

構文 用途 入力例 マッチ結果
(abc)+ まとまりの繰り返し abcabcx abcabc
`(?:jpg png)` 非キャプチャのOR file.png
`foo bar` OR条件 bar
\d+(?=円) 円の直前の数字 合計100円 100
^(?!.*error).* errorを含まない行 ok\nerror ok
(?<=¥)\d+ ¥の直後の数字 ¥300 300
(?<!Mr\.)\s[A-Z] Mr.の直後ではない大文字 Ms. Alice A

Part 3: 改行を含むテキストのマッチング例

用途 パターン 入力例 マッチ結果
HTMLブロック全体 `<div>(?:. \r \n)*?</div>`
ログ1件(日時〜次) `^[\d{4}-\d{2}-\d{2} [\d:]+](?:. \r \n)*?(?=^[\d{4}-\d{2}-\d{2}
Markdownコードブロック “ “`(?:. \r \n)*?“` “
コメント(//) `/*(?:. \r \n)*?*/`

Part 4: パターン集(否定・抽出)

用途 パターン 入力例 マッチ結果
数字のみ ^\d+$ 123 123
英数字のみ ^[A-Za-z0-9]+$ user01 user01
メール(簡易) ^[\w.-]+@[\w.-]+\.[A-Za-z]{2,}$ a@b.com a@b.com
URL https?://[\w.-]+\.[A-Za-z]{2,}(/[\w./?=&%-]*)? https://ex.com/a https://ex.com/a
ISO日付 \d{4}-\d{2}-\d{2} 2025-10-30 2025-10-30
国際電話番号 \+\d{1,3}[\s-]?\d{1,14} +81 90 1234 5678 全体一致
強力なパスワード ^(?=.*[a-z])(?=.*[A-Z])(?=.*\d).{8,}$ Abcd1234 全体一致
HTMLコメント `<!–(?:. \r \n)*?–>`
errorを含まない行 ^(?!.*error).* ok\nerror ok

Part 5: 置換例

タスク パターン 置換 入力例 出力結果
単語順を反転 (\w+)\s+(\w+) ${2} ${1} John Doe Doe John
区切り変更 ; , a;b;c a,b,c
空白統一 \s{2,} a b a b
HTMLタグ除去 <[^>]+> <p>a</p> a
Trim(前後空白除去) `^\s+ \s+$` a
改行→空白 \r?\n a\nb a b
行末コメント削除 //.*$ x=1;//note x=1;
日付統一 (\d{4})/(\d{2})/(\d{2}) ${1}-${2}-${3} 2025/10/30 2025-10-30
連続重複行圧縮 ^(.*)(\r?\n\1)+$ ${1} 同一行連続 1行化

まとめ

正規表現は多言語・多環境で動作し、スクリプトやログ解析、データ整備などに応用できます。