正規表現 (regular expression)

検索で使用できる正規表現は、検索ボックスの右上にあるボタンで一覧できます。しかしこれですべてではなく、以下で示すメタ文字もサポートされます。

メタ文字

Expression Webの正規表現は、Visual Studioのそれと基本的に同一です。

メタ文字 説明
.

任意の印字文字1文字、または改行文字 (\n) を除く任意の非印字文字1文字と一致するワイルド カード。

たとえば、正規表現c.tは、文字列 cat、c t、cot と一致するが、cost とは一致しない。この例では、ピリオド (.) は1文字を表すワイルド カード。ピリオドは 'c' と 't' の間にある。したがって、この正規表現は 'c' と 't' の間の任意の1文字 (スペースも含む) と一致する。

*

最長 … 正規表現の直前にある文字の0回以上の繰り返しのうち、最も長いものに一致する。

.*という正規表現は、1 つの文字の0回以上の繰り返しに一致する。

たとえば、正規表現 b.*kは、book、back、black、blank、および buck と一致する。この例では、ピリオド (.) をアスタリスク (*) と組み合わせて1つの構文を作っている。ピリオド (.) はアスタリスク (*) の直前にある。アスタリスク (*) は、'b と 'k' の間にある任意の文字の0回以上の繰り返しと一致する。ピリオド (.) は、'b' と 'k' の間の文字を表すワイルド カード。この例では、'b' と 'k' の間にある任意の文字が繰り返された文字列が検索されることを意味する。

+

最長 … 正規表現の直前にある文字の1回以上の繰り返しのうち、最も長いものに一致する。

.+という正規表現は、1 つの文字の1回以上の繰り返しに一致する。

たとえば、bo+.という正規表現は、bob、book、boot などに一致する。この例では、ピリオド (.) をプラス記号 (+) と組み合わせて1つの構文を作っている。ピリオド (.) はプラス記号 (+) の直後にある。プラス記号 (+) は、文字 'o' の1回以上の繰り返しと一致する。ピリオド (.) は各単語の最後の文字を表すワイルド カードで、この例では 'b'、'k'、および 't' がこれに該当する。

@

最短 … 正規表現の直前にある文字の0回以上の繰り返しのうち、最も短いものに一致する。

.@という正規表現は、1 つの文字の0回以上の繰り返しに一致する。

たとえば、正規表現a.@xは、'abxbxb' 内では 'abx' と一致し、'acxcxc' 内では 'acx' と一致する。この例では、ピリオド (.) をアット記号 (@) と組み合わせて1つの構文を作っている。ピリオド (.) はアット記号 (@) の直前にある。アット記号 (@) は、'a' と 'x' の間にある任意の文字の0回以上の繰り返しと一致する。この例では、ピリオド (.) は 'a' と 'x' の間にある 'b' と 'c' を表すワイルド カード文字。

#

最短 … 正規表現の直前にある文字の1回以上の繰り返しのうち、最も短いものに一致する。

たとえば、正規表現si.#erは、'sicker' または 'silkier' と一致する。この例では、ピリオド (.) をシャープ記号 (#) と組み合わせて1つの構文を作っている。ピリオド (.) はシャープ記号 (#) の直前にある。シャープ記号 (#) は、'si' と 'er' の間にある任意の文字の1回以上の繰り返しと一致する。ピリオド (.) は、sicker という単語では 'c' と 'k' を表すワイルド カード、silkier という単語では 'l'、'k'、および 'i' を表すワイルド カード。

[ ]

角かっこ ([ ]) で囲まれた文字の中のいずれかと一致する。[a-z]のようにハイフン (-) を使用して文字の範囲を指定することもできる。

次に例を示す。

  • c[aou]tという正規表現は cat、cot、cut には一致するが、cet や cit には一致しない。

  • 正規表現[0-9]は、任意の数字に一致する。また、文字の範囲を複数指定することもできる。

  • [A-Za-z]という正規表現は、すべての英文字 (大文字と小文字を含む) を意味する。

^

行の先頭と一致する。

^When inという正規表現は、たとえば "When in the course of human events" や "When in town, call me" など、"When in" で始まり、しかも行の先頭に出現する任意の文字列に一致する。しかし、行の先頭に出現する "What and when in the course of human events" には一致しない。

$

行の末尾と一致する。

たとえば、professional$という正規表現は、文字列の末尾の "He is a professional" には一致するが、"They are a group of professionals" には一致しない。

^^

ファイルの先頭と一致する。ソース コードやテキスト ファイル内の文字列を検索する場合にのみ有効。

たとえば、ファイルの先頭にある最初のHTMLタグを検索するには、^^という正規表現を使用する。

$$

ファイルの末尾と一致する。ソース コードやテキスト ファイル内の文字列を検索する場合にのみ有効。

たとえば、ファイルの末尾にある最後のHTMLタグ (タグの後ろにスペースのないもの) を検索するには、$$という正規表現を使用する。

|

2つの項目のいずれかを示す。つまり、OR記号 (|) の前または後の正規表現に一致する。

たとえば、(him|her)という正規表現は "it belongs to him" または "it belongs to her" に一致するが、"it belongs to them" には一致しない。

\

円記号 (\) の後ろの文字に一致するエスケープ文字。これにより左波かっこ ({) やカレット (^) など、正規表現の構文で使用される特殊文字も検索できる。

たとえば、\$を使用すると、ドル記号 ($) に一致する。行の末尾に一致する正規表現にはならない。同様に、\.を使用すると、ピリオド (.) に一致する。正規表現でピリオド (.) を使用した場合のように、任意の1文字に一致することはない。

{}

波かっこで囲まれた正規表現に一致する文字列にタグを付ける。検索の正規表現で、タグ付き文字列が出現している別の箇所を検索したり、置換の正規表現で、\Nを使用してタグ付き文字列を挿入することもできる。

たとえば、同じ単語が連続して2回出現するテキストを検索するとする。検索文字列には、{.#} \1という正規表現を使用する。

単語の間が単一の空白で区切られているものを検索する場合は、右波かっこ (}) と円記号 (\) の間に空白を入れる。

この例では、シャープ記号 (#) とピリオド (.)、および波かっこ ({}) を組み合わせて1つの構文を作成している。この正規表現で、.#は任意の文字の繰り返しを表す。この部分は波かっこ ({}) で囲まれているので、この中の繰り返し文字にタグが付けられ、\1として表される単語に置換される。この正規表現では、単語の後ろにスペースがあり、その後にまた同じ単語が続く文字列が検索される。

\N

検索の正規表現で、N番目のタグ付き正規表現に一致する。たとえば、\Nと指定すると、N番目のタグ付き正規表現に一致する文字列が検索される (Nは1~9の数字)。

置換の正規表現で、\Nと指定すると、N番目のタグ付き正規表現に一致する文字列が挿入される (N は1~9の数字)。\0と指定すると、検索の正規表現全体に一致する文字列が挿入される。

たとえば、同じ単語が連続して2回出現するものを検索し、それを単一の単語で置換するとする。検索文字列には、{.#} \lという正規表現を使用する。

単語の間が単一の空白で区切られているものを検索する場合は、右波かっこ (}) と円記号 (\) の間に空白を入れる。この例ではシャープ記号 (#) とピリオド (.)、および波かっこ ({}) を組み合わせて1つの構文を作成している。

文字列を置換するには、\1という正規表現を使用する。

\1は、検索文字列の最初の波かっこのペア内で見つかった文字列を表す。\1を使用して置換を行うと、連続する同じ単語がその単語1つに置き換えられる。

( )

サブ表現の先頭と末尾を表すグループ化正規表現。

サブ表現は、丸かっこ ( ) で囲まれた正規表現。たとえば、(ha)+など。この例では、プラス記号 (+) を丸かっこ ( ) グループ表現と組み合わせて1つの構文を作っている。丸かっこ ( ) で囲まれているため、(ha)がサブ表現となる。このサブ表現にプラス記号 (+) を追加すると、文字のペアの繰り返しを検索できる。プラス記号 (+) は、文字'ha'の1回以上の繰り返しを表す。

この正規表現は haha や hahaha に一致する。

~x

正規表現でこの位置に x が出現する場合、x は一致対象から除外される。

たとえば、real~(ity)という正規表現は、"realty" や "really" に含まれる "real" には一致するが、"reality" の "real" には一致しない。

\n

[コード]ビューでは復帰改行に一致する。また[デザイン]ビューでは <br> に一致する。

(\n)とすると、すべての改行を簡単に検索できる。

\t

1 つのタブ文字に一致する。

たとえば、行頭に存在する1つのタブ文字をすべて検索するには、次の正規表現を使用する。

^\t+

この例では、タブ (\t) にカレット (^) とプラス記号 (+) を組み合わせて1つの構文を作成している。単一のタブ文字の前にカレット (^) がある場合、行頭に存在するすべてのタブ文字に一致する。プラス記号 (+) は1つ以上のタブ文字に一致することを表す。

[^]

カレット (^) の後ろにある一連の文字に含まれないすべての文字に一致する。

たとえば、特定の範囲を除くすべての文字を検索するには、角かっこ内の最初の文字としてカレット (^) を使用する。[^269A-Z]という正規表現は、2、6、9、および大文字の英字を除くすべての文字に一致する。

n

カレット (^) の直前にある正規表現のn回の繰り返しに一致する。

たとえば、n を4とした正規表現、[0-9]^4は、任意の4桁の数字の並びに一致する。この例は、文字構文 ([ ]) のセットに繰り返しの構文 (^n) を組み合わせて、より実践的な正規表現の使い方を示している。

メタ文字 マッチ文字 説明
:b 空白

コードまたは文字列内の空白類に一致する。

たとえば、行の先頭にある単一の空白類を検索するには、^:bという正規表現を使用する。

:d 数字

[0-9]という正規表現と同じ意味になる。この正規表現では、すべての数字を検索できる。

たとえば、テキスト ファイル内の社会保障番号を検索するとする。米国の社会保障番号は 999-99-9999 という形式で表される。この場合、:d^3-:d^2-:d^4とするか、または[0-9]を使用して[0-9]^3-[0-9]^2-[0-9]^4]としても同様の結果を得ることができる。

[0-9]で数字をすべて表す代わりに、:dという簡単な正規表現を使用して同様の検索を実行できる。

:z 数字

[0-9]+という正規表現と同じ意味になる。

この構文を使用すると、簡単な記述で0以上の任意の数字を検索できる。

:n 数字 (小数点を含む)

([0-9]+\.[0-9]*)|([0-9]*\.[0-9]+)|([0-9]+)という正規表現と同じ意味になる。

小数点を含むすべての数字を検索する場合は、([0-9]+\.[0-9]*)|([0-9]*\.[0-9]+)|([0-9]+)という長い正規表現を入力する代わりに:nという簡単な正規表現を使用できる。

:h 数字 (16進数)

正規表現[0-9a-fA-F]+と同じ意味になる16進数表現。

この正規表現は、A ~ F までの英文字 (大文字と小文字を含む) および任意の数字から構成される16進数を検索する場合に使用する。

たとえば、Web サイトの複数のページに異なる色の背景を使用しているとする。これらのページの色を黒 (000000 など) に変更したいが、現在の色の16進数値がわからないような場合、次の正規表現を使用すると、既存の16進数値をすべて検索できる。

\#:h

[0-9a-fA-F]という正規表現を使用すれば検索は可能だが、この例では、円記号 (\) とシャープ記号 (#) を、16 進数値 (:h) 構文と組み合わせている。\#は、正規表現ではないシャープ記号 (#) と一致し、:hは、任意の16進数値シーケンスと一致する。

現在の16進数値を置換するには、使用したい背景色の16進数値を000000のように入力する。

:c 英文字

[a-zA-Z]という正規表現と同じ意味になる。この正規表現では、すべての英文字 (大文字と小文字を含む) が検索される。

[a-zA-Z]で英文字をすべて表す代わりに、:cという簡単な正規表現を使用して同様の検索を実行できる。

:w 英文字

[a-zA-Z]+という正規表現と同じ意味になる。

この構文を使用すると、簡単な記述で1つ以上の英文字 (大文字と小文字を含む) を検索できる。

:a 英文字と数字

[a-zA-Z0-9]という正規表現と同じ意味になる。

[a-zA-Z0-9]という正規表現を使用すると、文字 (大文字または小文字) または数字の1回の繰り返しに一致する。「英数字オカレンス」とも呼ばれる。[a-zA-Z0-9]で英数字をすべて表す代わりに、:aという簡単な正規表現を使用して同様の検索を実行できる。

:i 識別子

[a-zA-Z_$][a-zA-Z0-9_$]*という正規表現に一致する。

コードを作成しているときに、プログラムのすべての識別子を検索する場合は、[a-zA-Z_$][a-zA-Z0-9_$]*という長い正規表現を入力する代わりに:iという簡単な正規表現を使用できる。

:q 引用符に囲まれた文字

("[~"]*")|('[~']*')と同じ意味になる。

引用符に囲まれたすべての文字列を検索する場合は、("[~"]*")|('[~']*')という長い正規表現を入力する代わりに:qという簡単な正規表現を使用できる。

テキスト検索のための正規表現 | MSDN
Perlの正規表現との相違
分類 説明 メタ文字
Expression Web Perl
量指定子 0回以上のくり返し (最短位置) @ *?
1回以上のくり返し (最短位置) # +?
位置 ファイルの先頭 ^^ なし
ファイルの最後 $$ なし
文字クラス 対象外 ~x (?!…)
繰り返しの表現 ^n {n}
グループ化 グループ化 (後方参照のため) {} ()

記述例

用途 検索する文字列 置換後の文字列
内部リンクの
index.htmの検索
href="[-a-z/_.]*index\.(htm|html|php) なし
タグの属性の削除 <{[a-z]+}( [a-z]+="[^"]*")+ <\1
コードのコメントに
スタイルを適用
//.* <span class="comment">\0</span>

「:」が文字クラスの略記 (:b、:dなど) に用いられているため、「http://」のような文字がパターンに含まれていると「正規表現の文字列 'http://' は正しくありません。」としてエラーとなります。よって「http\://」のようにエスケープします。