目的別の正規表現テクニック一覧
文字クラスとメタ文字
特定の文字や文字の種類に一致させるための基本的な構成要素です。
メタ文字 | 説明 | 例 |
---|---|---|
. |
改行文字を除く任意の1文字に一致します。(s フラグ(DOTALL)が有効な場合は改行文字にも一致します) |
a.c は “abc”, “a_c”, “a&c” などに一致。 |
\d |
任意の数字1文字に一致します。[0-9] と等価です。 |
\d{3} は “123”, “987” など3桁の数字に一致。 |
\D |
数字以外の任意の1文字に一致します。[^0-9] と等価です。 |
\D+ は “abc”, “Hello World”, “!-?” など数字を含まない文字列に一致。 |
\w |
英数字(大文字小文字)およびアンダースコア `_` のいずれか1文字に一致します。[a-zA-Z0-9_] とほぼ等価ですが、ロケールやUnicode設定によっては他の文字も含む場合があります。 |
\w+ は “word”, “variable_name”, “user123” などに一致。 |
\W |
英数字およびアンダースコア `_` 以外の任意の1文字に一致します。[^a-zA-Z0-9_] とほぼ等価です。 |
\W は “-“, “&”, ” “, “!” などに一致。 |
\s |
任意の空白文字1文字に一致します。スペース、タブ \t 、改行 \n 、復帰 \r 、フォームフィード \f などが含まれます。 |
Hello\sWorld は “Hello World”, “Hello\tWorld” などに一致。 |
\S |
空白文字以外の任意の1文字に一致します。 | \S+ は空白を含まない連続した文字列 (“word”, “123”, “!@#”) に一致。 |
\t |
タブ文字に一致します。 | \t |
\n |
改行文字(ラインフィード)に一致します。 | \n |
\r |
復帰文字(キャリッジリターン)に一致します。 | \r |
\ |
メタ文字(. , * , + , ? , ( , ) , { , } , [ , ] , \ , ^ , $ , | )を通常のリテラル文字として扱いたい場合に使用します。 |
\. はピリオド文字 “.” に一致。\* はアスタリスク “*” に一致。 |
量指定子 (Quantifiers) 🔢
直前の文字、グループ、または文字クラスが何回繰り返すかを指定します。
貪欲 (Greedy) vs 非貪欲 (Non-Greedy/Lazy) vs 最長一致 (Possessive)
デフォルトでは量指定子は貪欲であり、可能な限り長い文字列に一致しようとします。
量指定子の後に
量指定子の後に
デフォルトでは量指定子は貪欲であり、可能な限り長い文字列に一致しようとします。
量指定子の後に
?
を付けると非貪欲になり、可能な限り短い文字列に一致しようとします。量指定子の後に
+
を付けると最長一致になり、一度マッチした部分をバックトラック(再試行)しません。(エンジンによってはサポート外)
量指定子 | 説明 | 例 (貪欲) | 例 (非貪欲) | 例 (最長一致) |
---|---|---|---|---|
* |
直前の要素が0回以上繰り返す場合に一致します。 | a* (“aaa”, “a”, “”) |
a*? (“” を優先) |
a*+ |
+ |
直前の要素が1回以上繰り返す場合に一致します。 | a+ (“aaa”, “a”) |
a+? (“a” を優先) |
a++ |
? |
直前の要素が0回または1回出現する場合に一致します。(省略可能) | colou?r (“color”, “colour”) |
colou??r (? に ? を付ける意味は通常ないが、構文的には “color” を優先) |
colou?+r |
{n} |
直前の要素がちょうど n 回繰り返す場合に一致します。 |
\d{3} (“123”) |
||
{n,} |
直前の要素が少なくとも n 回繰り返す場合に一致します。 |
\d{2,} (“12”, “12345”) |
\d{2,}? (“12” を優先) |
\d{2,}+ |
{n,m} |
直前の要素が少なくとも n 回、最大で m 回繰り返す場合に一致します。 |
\d{2,4} (“12”, “123”, “1234”) |
\d{2,4}? (“12” を優先) |
\d{2,4}+ |
例:「<tag>content</tag>」という文字列からタグの内容を取得する
# 貪欲なマッチ (意図しない結果になることがある)
pattern_greedy = r"<.*>" # "<tag>content</tag>" 全体にマッチしてしまう
# 非貪欲なマッチ (意図通り)
pattern_lazy = r"<.*?>" # "<tag>" と "</tag>" にそれぞれマッチ
pattern_content = r"<tag>(.*?)</tag>" # カッコで囲むと内容 "content" をキャプチャできる
アンカー (Anchors) ⚓
文字列内の特定の位置(先頭、末尾、単語境界など)に一致します。文字自体には一致しません。
アンカー | 説明 | 例 |
---|---|---|
^ |
文字列の先頭に一致します。(マルチラインモードでは行の先頭) | ^abc は “abcde” には一致するが、”xyzabc” には一致しない。 |
$ |
文字列の末尾に一致します。(マルチラインモードでは行の末尾) | xyz$ は “abcxyz” には一致するが、”xyzabc” には一致しない。 |
\b |
単語境界に一致します。単語構成文字 (\w ) と非単語構成文字 (\W ) の間、または文字列の先頭/末尾と単語構成文字の間にマッチします。 |
\bword\b は “word” や “word.” に一致するが、”sword” や “wording” には一致しない。 |
\B |
非単語境界に一致します。\b が一致しない位置に一致します。 |
\Bword\B は “sword” や “wording” の “word” 部分に一致するが、”word” 単体や “word.” には一致しない。 |
\A |
文字列の絶対的な先頭にのみ一致します。(マルチラインモードの影響を受けません) | \Aabc は常に文字列全体の先頭の “abc” にのみ一致。 |
\Z |
文字列の絶対的な末尾、または末尾の改行の直前に一致します。(マルチラインモードの影響を受けません) | xyz\Z は “abcxyz” や “abcxyz\n” に一致。 |
\z |
文字列の絶対的な末尾にのみ一致します。(末尾の改行があってもその手前には一致しません) | xyz\z は “abcxyz” には一致するが、”abcxyz\n” には一致しない。 |
グループ化とキャプチャ (Grouping and Capturing) 📦
パターンの一部をまとめたり、一致した部分文字列を後で参照(キャプチャ)したりするために使用します。
構文 | 種類 | 説明 | 例 |
---|---|---|---|
( ... ) |
キャプチャグループ | 括弧内のパターンに一致する部分文字列をキャプチャし、番号付きグループ(\1 , \2 …)として保存します。グループ化の基本形です。 |
(ab)+ は “ababab” に一致し、最後の “ab” をグループ1にキャプチャします。(\d{4})-(\d{2})-(\d{2}) は “2025-04-01″ に一致し、”2025”, “04”, “01” をそれぞれグループ1, 2, 3にキャプチャします。 |
(?: ... ) |
非キャプチャグループ | 括弧内のパターンをグループ化しますが、一致した部分文字列をキャプチャしません。量指定子を適用したり、選択肢をまとめたりするのに便利です。 | (?:abc|def) は “abc” または “def” に一致しますが、キャプチャはしません。(?:http|https)://... はプロトコル部分をグループ化しますが、キャプチャ番号を消費しません。 |
(?<name> ... ) または (?'name' ... ) |
名前付きキャプチャグループ | キャプチャグループに名前を付けます。後方参照や結果の取得時に番号ではなく名前でアクセスできます。(構文はエンジンにより異なる場合があります) | (?<year>\d{4})-(?<month>\d{2})-(?<day>\d{2}) は “2025-04-01” に一致し、それぞれ “year”, “month”, “day” という名前でキャプチャします。 |
| |
選択 (Alternation) | A|B の形で、A または B のいずれかに一致します。通常、グループ内で使用されます。 |
cat|dog は “cat” または “dog” に一致。^(GET|POST)\s は行頭の “GET ” または “POST ” に一致。 |
文字セット (Character Sets) [abc]
角括弧 []
を使用して、指定された文字のいずれか1つに一致させます。
構文 | 説明 | 例 |
---|---|---|
[abc] |
指定された文字(この場合は ‘a’, ‘b’, ‘c’ のいずれか1つ)に一致します。 | gr[ae]y は “gray” または “grey” に一致。 |
[^abc] |
キャレット ^ が角括弧の先頭にある場合、指定された文字以外(この場合は ‘a’, ‘b’, ‘c’ 以外)の任意の1文字に一致します。(否定) |
[^0-9] は数字以外の任意の1文字に一致 (\D と等価)。 |
[a-z] |
ハイフン - を使用して文字の範囲を指定します。この場合は ‘a’ から ‘z’ までの任意の小文字アルファベット1文字に一致します。 |
[a-zA-Z0-9] は英数字1文字に一致 (\w はアンダースコアも含む点で異なる)。 |
[ad-f] |
複数の範囲や個別の文字を組み合わせることができます。この場合は ‘a’, ‘d’, ‘e’, ‘f’ のいずれか1文字に一致します。 | [a-cxyz] は ‘a’, ‘b’, ‘c’, ‘x’, ‘y’, ‘z’ のいずれか1文字に一致。 |
[\d\s] |
文字クラスのメタ文字 (\d , \s , \w など) を文字セット内で使用できます。この場合は数字または空白文字のいずれか1文字に一致します。 |
[\w-] は英数字、アンダースコア、またはハイフンに一致。 |
[.^$*+?{}()|\[\]\\] |
文字セット内では、ほとんどのメタ文字 (. , * , + , ? , () , {} , | ) は特別な意味を持ちません。ただし、^ (先頭の場合)、- (範囲指定)、] (セット終端)、\ (エスケープ) は注意が必要です。リテラルとして含める場合は \ でエスケープするか、特別な意味を持たない位置に配置します(例: - を先頭や末尾に置く [-abc] , [abc-] )。 |
[.] はリテラルのピリオド “.” に一致。[\\*+] はバックスラッシュ、アスタリスク、プラス記号のいずれかに一致。 |
[[:alnum:]] など (POSIX文字クラス) |
一部の正規表現エンジン(例: grep, sed)では、POSIX文字クラスを使用できます。[[:alnum:]] は英数字、[[:alpha:]] は英字、[[:digit:]] は数字、[[:space:]] は空白文字などに一致します。 |
[[:punct:]] は句読点文字に一致。 (注意: JavaScriptなどでは通常サポートされません) |
後方参照 (Backreferences) 🔄
先行するキャプチャグループで一致したテキストと全く同じテキストに再度一致させるために使用します。
構文 | 種類 | 説明 | 例 |
---|---|---|---|
\1 , \2 , … |
番号付き後方参照 | n 番目のキャプチャグループで一致したテキストと同一の文字列に一致します。 |
([a-z])\1 は連続する同じ小文字 (“aa”, “bb” など) に一致。<([a-zA-Z]+)>.*?</\1> は対応するHTML/XMLタグ (例: “<p>text</p>”) に一致。 |
\k<name> または \k'name' |
名前付き後方参照 | name という名前のキャプチャグループで一致したテキストと同一の文字列に一致します。(構文はエンジンにより異なる場合があります) |
<(?<tag>[a-zA-Z]+)>.*?</\k<tag>> は名前付きグループを使用して対応するタグに一致。 |
注意点: 後方参照は、参照先のグループが「一致した特定のテキスト」にマッチします。グループの「パターン」に再度マッチするわけではありません。例えば、
([abc])\1
は “aa”, “bb”, “cc” には一致しますが、”ab”, “ac”, “ba” などには一致しません。
先読み・後読み (Lookarounds) 👀
特定の位置の前後にあるパターンを条件として指定しますが、そのパターン自体はマッチ結果には含まれません(幅ゼロのアサーション)。
構文 | 種類 | 説明 | 例 |
---|---|---|---|
(?= ... ) |
肯定先読み (Positive Lookahead) | 現在の位置の直後に、指定したパターン ... が続く場合にのみ、その位置にマッチします。パターン自体は消費しません。 |
q(?=u) は、”quit” の “q” にのみ一致します (“u” はマッチ結果に含まれません)。パスワード要件などで ^(?=.*[A-Z])(?=.*[a-z])(?=.*\d).{8,}$ (大文字、小文字、数字を含み8文字以上) のように使われます。 |
(?! ... ) |
否定先読み (Negative Lookahead) | 現在の位置の直後に、指定したパターン ... が続かない場合にのみ、その位置にマッチします。パターン自体は消費しません。 |
q(?!u) は、”Iraq” の “q” に一致しますが、”quit” の “q” には一致しません。\b(?!bad)\w+\b は “bad” を除く単語に一致。 |
(?<= ... ) |
肯定後読み (Positive Lookbehind) | 現在の位置の直前に、指定したパターン ... が存在する場合にのみ、その位置にマッチします。パターン自体は消費しません。(多くのエンジンでは固定長パターンのみサポート) |
(?<=\$)[\d.]+ は、”Price: $12.99″ の “12.99” に一致します (“$” は含まれません)。 |
(?<! ... ) |
否定後読み (Negative Lookbehind) | 現在の位置の直前に、指定したパターン ... が存在しない場合にのみ、その位置にマッチします。パターン自体は消費しません。(多くのエンジンでは固定長パターンのみサポート) |
(?<!USD)\d+ は、”EUR100″, “JPY5000″ の数字部分に一致しますが、”USD200” の数字部分には一致しません。 |
後読みの制限: JavaScriptなど一部の環境では後読みのサポートが限定的であったり、最近のバージョンで追加された機能であったりします。また、多くのエンジンでは後読み内のパターンは固定長(例:
abc
, \d{3}
)である必要があります。可変長(例: a+
, \d*
)の後読みはサポートされていないことが多いです。
オプションフラグ (Option Flags) 🚩
正規表現全体の動作を変更するためのフラグです。指定方法は言語やツールによって異なります(例: Pythonでは re.IGNORECASE
, JavaScriptでは /pattern/i
)。
フラグ (共通名) | 短い記号 (例) | 説明 | インライン修飾子 |
---|---|---|---|
Ignore Case (大文字小文字無視) | i |
アルファベットの大文字と小文字を区別せずにマッチングを行います。 | (?i)abc または (?i:abc) (グループ内のみ適用) |
Multiline (複数行モード) | m |
^ と $ が文字列全体の先頭/末尾だけでなく、各行の先頭/末尾にもマッチするようになります。 |
(?m)^abc$ または (?m:^abc$) |
Dot All (Single Line) | s |
メタ文字 . が改行文字 \n にもマッチするようになります。 |
(?s)a.c または (?s:a.c) |
Verbose (詳細モード) | x |
パターン内の空白文字(スペース、タブ、改行)が無視され、# から行末までがコメントとして扱われます。複雑な正規表現を読みやすく記述できます。リテラルの空白が必要な場合は \ や [ ] を使います。 |
(?x) \d{3} # 電話番号の市外局番 \s -? # 区切り文字 または (?x: ... ) |
Unicode | u |
\w , \d , \s などの文字クラスや . がUnicodeの文字プロパティに基づいて動作するようになります。また、サロゲートペアなどの扱いも正しく行われます。(Python 3 や JavaScript ES6以降などではデフォルトで有効な場合が多い) |
(?u)\w+ または (?u:...) (エンジン依存) |
Global (グローバル検索) | g |
文字列全体を検索し、最初の一致だけでなく、すべての一致箇所を見つけます。(これは通常、正規表現エンジンを呼び出す関数のオプションであり、パターン自体のフラグではありませんが、JavaScriptなどでは /pattern/g の形で指定します) |
N/A (インラインでは通常指定不可) |
インライン修飾子 (?flags)
は、パターンの先頭に置くとパターン全体に影響し、(?flags:...)
の形式でグループに適用するとそのグループ内のみに影響します。(?-flags)
でフラグを無効化することも可能です(例: (?i)Case(?i-m)Insensitive
)。
エスケープシーケンス ESC
特別な意味を持つ文字をリテラル文字として扱ったり、表現しにくい文字(制御文字など)をパターンに含めたりするために使用します。
シーケンス | 説明 |
---|---|
\. \* \+ \? \{ \} \( \) \[ \] \\ \^ \$ \| |
メタ文字をリテラル文字としてエスケープします。 |
\t, \n, \r, \f, \v |
それぞれタブ、改行(LF)、復帰(CR)、フォームフィード、垂直タブを表します。 |
\cX |
Ctrl-X 制御文字に一致します。例えば \cJ は Ctrl+J (改行) に相当することがあります。 |
\xHH |
16進数2桁 HH で指定された文字コードの文字に一致します (Latin-1の範囲)。例: \x41 は ‘A’ に一致。 |
\uHHHH |
16進数4桁 HHHH で指定されたUnicode文字に一致します。例: \u3042 はひらがなの「あ」に一致。 |
\u{HHHHH} |
(一部エンジン) 16進数で指定されたUnicodeコードポイントの文字に一致します。BMP外の文字も表現可能。例: \u{1F600} は 😀 (Grinning Face) に一致。 |
\p{...} , \P{...} |
(Unicodeプロパティ) 指定されたUnicodeプロパティを持つ文字に一致 (\p ) または持たない文字に一致 (\P )。要Unicodeサポート。例: \p{Script=Hiragana} はひらがな、\p{Lu} は大文字、\P{White_Space} は空白以外。 |
\Q ... \E |
(一部エンジン) \Q と \E の間にあるすべての文字をリテラルとして扱います。メタ文字もエスケープされます。 |
よく使うパターン例 💡
特定の目的で頻繁に使用される正規表現パターンの例です。
目的 | パターン例 | 簡単な説明 |
---|---|---|
メールアドレス |
|
基本的なメールアドレス形式。より厳密なRFC準拠パターンは非常に複雑になります。 |
URL (HTTP/HTTPS) |
|
HTTPまたはHTTPSプロトコルのURL。これも完璧ではありません。 |
IPアドレス (IPv4) |
|
0.0.0.0 から 255.255.255.255 までのIPv4アドレス形式。 |
日本の郵便番号 |
|
NNN-NNNN 形式の郵便番号。 |
日本の携帯電話番号 |
|
0[789]0-NNNN-NNNN 形式の携帯電話番号(ハイフンあり)。 |
日付 (YYYY-MM-DD) |
|
簡単な YYYY-MM-DD 形式。日付の妥当性(例: 2月30日)はチェックしません。 |
HTMLタグ (開始・終了) |
|
簡単なHTML/XMLタグに一致。属性などは考慮していません。正規表現でのHTML/XMLの完全な解析は推奨されません。 |
全角スペースを含む空白 |
|
半角空白 (\s ) と全角スペース ( ) の1回以上の繰り返し。 |
これらのパターンは基本的な例であり、すべてのケースを網羅するものではありません。特定の要件に合わせて調整が必要です。特に、複雑な構造(HTML、メールアドレスRFC準拠など)の完全な検証には、正規表現だけでは不十分な場合があります。
コメント