home(h) links(l) memo profile(r)
memo(m) 正規表現・ワイルドカード

正規表現・ワイルドカード

特殊な意味を持つ文字(メタ文字)

次の文字を正規表現パターン中に記す場合、特殊な意味を持つため、その文字自体を指示するには直前にバックスラッシュ("\")を記してエスケープする必要がある。

正規表現の種類 文字
^ $ . [ ] | ( ) ? * + { } -
PCRE、POSIX拡張[1] 角かっこ[]の外 -
角かっこ[]の中[2] - - - - - - - - - - -
POSIX基本 角かっこ[]の外 - - - - - - - -
角かっこ[]の中 - - - - - - - - - - -
  1. 正規表現仕様がPCRE(Perl互換)になっているコマンドはPHPのPCRE関数群(例:preg_matchpreg_match_allpreg_replace)など、POSIX拡張正規表現になっているコマンドはUNIXシェルコマンドのegrepなど
  2. 正規表現仕様がPOSIX基本になっているコマンドはUNIXシェルコマンドのgrepsedvi内での検索置換など

○→文字そのものを指定するにはエスケープが必要

それぞれの意味は以下の通り。

【角かっこ[ ]の外】
パターン 意味
^ 行頭
$ 行末
. 改行を除く任意の1文字
[ 文字クラス定義の開始
] 文字クラス定義の終了
| 選択枝の開始
( サブパターンの開始
) サブパターンの終了
? 直前のパターンに0回または1回マッチ、最少回数マッチ [abc]?→abcいずれか1文字0回または1回にマッチ
This is a pen. That is a pen.
This.+pen\.→This〜pen.に最長マッチ→「This is a pen. That is a pen.」にマッチ
This.+?pen\.→This〜pen.に最短マッチ→「This is a pen.」にマッチ。
* 直前のパターンを0回以上の繰り返し
+ 直前のパターンを1回以上の繰り返し
{ 量指定子の開始
} 量指定子の終わり
【角かっこ[ ]の中】
パターン 意味
^ クラスの否定(文字クラスの最初に記した場合のみ) [^0123456789](数字以外)
- 文字範囲の指定(文字クラスの最初以外に記した場合) [0-9](数字)
[0-9\-](数字とハイフン)
[-0-9](数字とハイフン)
] 文字クラスの終わり [[{(\]})](大中小括弧)

制御系文字の出力

一般的にバックスラッシュを前に付けると、特殊な意味をなくす効果を持つ(例:\* → アスタリスクそのもの)。逆に以下の場合は制御系文字などを意味する。

パターン 意味
\a アラーム、ベル(16進 07)
\cx Ctrl + x
\e エスケープ文字(16進 1B)
\f 改ページ(formfeed、16進 0C)
\n 改行(newline、16進 0A)
\r 復帰(carriage、16進 0D)
\t タブ(tab、16進 09)
\xhh キャラクターコードhh(16進数)の文字
\ddd キャラクターコードddd(8進数)の文字、または後方参照

バックスラッシュの直後が数字の場合、8進数コードか後方参照、どちらとして解釈されるかは複雑。

パターン 意味 解釈
\040 空白文字(8進 40、16進 20) 8進数コード
\40(サブパターン40個未満) 空白文字(8進 40、16進 20) 8進数コード
\40(サブパターン40個以上) 40番目のサブパターン 後方参照
\7 7番目のサブパターン 後方参照
\11(サブパターン11個未満) タブ文字(8進 11、16進 09) 8進数コード
\11(サブパターン11個以上) 11番目のサブパターン 後方参照
\011 タブ文字(8進 11、16進 09) 8進数コード
\113 K(8進 113、16進 4B)※100以上の後方参照はない 8進数コード

包括的文字クラスの指定

パターン 意味
\d 10進数の数字([0-9]
\D 10進数の数字以外([^0-9]
\s 空白文字
\S 空白文字以外
\w 単語構成文字([0-9A-Za-z_]
\W 単語構成文字以外([^0-9A-Za-z_]

後方参照

先に登場したパターンを後に参照するには、\数値 を使う。$数値 でもOK? なお直後に数字が続く場合は ${数値} のように番号を中括弧で囲む。

【例】PDBx:entity要素を検出するパターン(<PDBx:entity id="?">....</PDBx:entity>)
<(entity) .*>.*<\/\1> ←\1 の参照する内容は1番目に登場するサブパターン(entity)

パターンを (...) ではなく (?:...) で囲んでおくとキャプチャされない?9

各正規表現の比較

Emacs PCRE[8](Perl互換) POSIX基本正規表現
grep/sed/vi
POSIX拡張正規表現
egrep
Word 備考
.(ドット) .(ドット) .(ドット) ? 改行文字を除く任意の1文字。但し、perlで単一行指定をした場合は改行文字も含む。Wordは改行を含むのかどうかは未確認。

例1:文字列 "abcadcaecefc" 中の "a?c"(?は任意の1文字)を全て "axc" に置換する。

[文字列] [文字列] [文字列] 文字列のいずれか1文字を含むことを意味する。詳細は「文字クラス定義」参照。
[^文字列] [^文字列] [!文字列] 文字クラス内で後続のパターンを否定する。
^ ^ < (文字クラス外で)行頭に一致
$ $ > (文字クラス外で)行末に一致
\< (文字クラス外で)単語の先頭
\> (文字クラス外で)単語の末尾となる空文字
\w \w、[[:alnum::]] アルファベット、数字、下線のいずれか1文字。"[a-zA-Z0-9_]" と同じ。
\W \W、[^[:alnum:]] アルファベット、数字、下線以外のいずれか1文字。下線以外の記号、英数字ではない文字(全角文字など)。"[^a-zA-Z0-9_]" と同じ。
\s 空白文字(スペース、復帰文字、タブ、改行文字、ラインフィード)。"[ ¥r¥t¥n¥f]" と同じ。
\S 空白文字以外。"[^ ¥r¥t¥n¥f]" と同じ。
\d 数字。"[0-9]" と同じ。
\d 数字以外。"[^0-9]" と同じ。
* * * 量指定子。直前のパターン0回以上に一致。"/img[0-9]*/" は "img","img8","img123"などに一致。
+ (なし) + @ 量指定子。直前のパターン1回以上に一致。"/img[0-9]+/" は "img8","img123"などに一致。"img"には一致しない。
? (なし) ? ? 量指定子。直前のパターン0回か1回に一致。"/img[0-9]?/" は "img","img8"などに一致。"img123"には一致しない。Wordの場合は「1回のみ」(0回はヒットしない)?(未確認)
\{m\} {m} \{m\} {m} {m} 量指定子。丁度m回に一致。
\{m,\} {m,} \{m,\} {m,} {m,} 量指定子。m回以上に一致。
\{m,n\} {m,n} \{m,n\} {m,n} {m,n} 量指定子。m回以上n回以下に一致。
\(...\) (...) \(...\) (...) (...) グループ化。囲まれた部分にマッチするパターンを後で参照できる(後方参照)。
\1,\2,...,\9 $1,$2,... \1,\2,... \1,\2,... 後方参照。前項のグループ化で指定したパターン。数値は前からの登場順。後方参照の直後に数字が来る場合の対処法
【Perlの例】「Version 3.7.2, &nbsp;」→「Version 3.8, &nbsp;」
s/Version 3\.7\.2, \ /${1}8${2}/
| | (なし) | 前後の正規表現のどちらか一方にマッチすればマッチしたと判定される。
Emacs PCRE[8](Perl互換) grep/sed/vi
基本正規表現
egrep
拡張正規表現
Word 備考
文字クラス定義([ ... ]内)での規則
Emacs perl caseの条件節 備考
^ ^ ^ 否定。文字クラスの先頭にこの文字を記述すると、以降の[ ... ]内文字をいずれも含まないことを意味する。

[^abc]→abc以外

!
- - - 範囲。文字コードがハイフン前後の文字を含め、その間にある文字全てが対象になる。

[0-9]→0〜9(数字全て)

[A-Z]→大文字全て