正規表現(Regular Expression)のチートシート

以下は、さまざまな言語やツールで使われる正規表現の共通ルールをまとめたものです。


基本的な文字クラス

パターン説明
.任意の1文字(改行を除く)
\d任意の数字(0-9)
\D数字以外の任意の文字
\w任意の単語構成文字([a-zA-Z0-9_])
\W単語構成文字以外
\s任意の空白文字(スペース、タブなど)
\S空白以外の任意の文字

特殊文字(エスケープが必要な文字)

文字説明
\エスケープ文字
^行の先頭を示す
$行の末尾を示す
*0回以上の繰り返し
+1回以上の繰り返し
?0回または1回の出現
{n}n回の繰り返し
{n,}n回以上の繰り返し
{n,m}n回以上m回以下の繰り返し
``
( )グループ化
[ ]文字クラスを定義
-範囲を指定(例: [a-z]

アンカー(位置指定)

パターン説明
^行の先頭
$行の末尾
\b単語境界
\B非単語境界
(?=...)ポジティブの先読み
(?!...)ネガティブの先読み
(?<=...)ポジティブの後読み
(?<!...)ネガティブの後読み

応用例

パターン説明
\d{3}-\d{4}日本の郵便番号(例: 123-4567)
[a-zA-Z]+英単語(1文字以上)
^[a-z0-9._%+-]+@[a-z0-9.-]+\.[a-z]{2,}$Eメールアドレスの検証
`(httphttps)://\S+`
\b\d{10,}\b10桁以上の数字を検出

フラグ(オプション)

フラグ説明
i大文字小文字を区別しない
gグローバルマッチ(すべて一致させる)
m複数行モード
sドットが改行文字にも一致する

高度なパターン

パターン説明
(?>...)独立型グループ(バックトラックを無効化)
(?:...)非キャプチャグループ(結果に含めないグループ化)
\G直前のマッチ位置(連続したマッチに使用)
[^\r\n]改行を含まない任意の文字
[^\0]NULL文字以外の任意の文字

Unicodeに関連する表現

パターン説明
\p{L}任意の文字(Unicodeでの「文字」クラス)
\p{N}任意の数字
\p{Z}任意のスペース
\P{L}文字以外(大文字のPで否定)
\X任意のUnicode拡張グラフ(合成文字などを含む)

特殊なシーケンス

シーケンス説明
(?<name>...)名前付きキャプチャグループ(例: (?<year>\d{4})
\k<name>名前付きキャプチャグループの参照(例: \k<year>
(?#...)コメント(正規表現内で無視されるテキスト)
`(?…)`

バックリファレンス(後方参照)

パターン説明
(.)\1同じ文字が2回続く(例: aa
(.+)\1繰り返されるパターン(例: abcabc
(?<name>.+)\k<name>名前付き後方参照

制御文字

シーケンス説明
\tタブ
\n改行
\rキャリッジリターン
\fフォームフィード
\v垂直タブ

よくあるユースケース

数値関連

パターン説明
^-?\d+(\.\d+)?$正負を含む整数や小数(例: -123.45
\b[1-9][0-9]{2,}\b3桁以上の自然数

日付・時刻

パターン説明
`\b\d{4}-(0[1-9]1[0-2])-(0[1-9]

HTMLタグ

パターン説明
<[a-zA-Z]+[^>]*>任意の開始タグ
</[a-zA-Z]+>任意の終了タグ
<([a-zA-Z]+)[^>]*>.*?</\1>開始・終了タグが一致するHTML要素

正規表現ツールの違い

正規表現は、使用する環境やツール(Python, JavaScript, Java, grepなど)によって細かい仕様が異なる場合があります。以下は主な違いです:

特徴PythonJavaScriptgrep
名前付きグループ(?P<name>...)(?<name>...)サポートなし
Lookbehindサポート部分サポートサポートなし
Unicode対応サポートサポート一部制限あり