テキスト検索のための正規表現
Microsoft Expression Web では、正規表現を使用して高度な検索と置換を実行できます。正規表現は、検索するテキストやコードが正確にわからない場合や、1 つ以上の類似性を持つテキストやコードの文字列をすべて検索する場合に便利です。
正規表現は、検索する 1 つ以上のテキストやコードを表す文字列のパターンです。正規表現は、特定の文字 (たとえば "a" から "z" までの英字) と文字列のパターンを表す特殊文字 (アスタリスクなど) から構成されます。たとえば、サイトで "page" から始まるすべての文字列を検索するには、正規表現の "page*" を検索します。この検索を実行すると、Expression Web により "page"、"pages"、"pager" など、サイト内にある "page" で始まるすべての文字列が見つかります。
検索に正規表現を使用する際、文字をどのように組み合わせて一致条件を指定するかを制御する特別なルールが決められています。個々の正規表現や正規表現の組み合わせを構文と呼びます。1 つの構文に複数の正規表現を使用して、検索の条件を細かく指定できます。
正規表現の使用方法については、「検索と置換を使った複数ページの編集」を参照してください。
正規表現の構文
構文 | 正規表現の説明 |
---|---|
. |
任意の文字 任意の印字文字 1 文字、または改行文字 (\n) を除く任意の非印字文字 1 文字と一致するワイルド カードです。 たとえば、正規表現 c.t は、文字列 cat、c t、cot と一致しますが、cost とは一致しません。この例では、ピリオド (.) は 1 文字を表すワイルド カードです。ピリオドは 'c' と 't' の間にあります。したがって、この正規表現は 'c' と 't' の間の任意の 1 文字 (スペースも含む) と一致します。 |
* |
最長 - 0 回または 1 回以上 正規表現の直前にある文字の 0 回以上の繰り返しのうち、最も長いものに一致します。 .* という正規表現は、1 つの文字の 0 回以上の繰り返しに一致します。 たとえば、正規表現 b.*k は、book、back、black、blank、および buck と一致します。この例では、ピリオド (.) をアスタリスク (*) と組み合わせて 1 つの構文を作っています。ピリオド (.) はアスタリスク (*) の直前にあります。アスタリスク (*) は、'b と 'k' の間にある任意の文字の 0 回以上の繰り返しと一致します。ピリオド (.) は、'b' と 'k' の間の文字を表すワイルド カードです。この例では、'b' と 'k' の間にある任意の文字が繰り返された文字列が検索されることを意味します。 |
+ |
最長 - 1 回以上 正規表現の直前にある文字の 1 回以上の繰り返しのうち、最も長いものに一致します。 .+ という正規表現は、1 つの文字の 1 回以上の繰り返しに一致します。 たとえば、bo+. という正規表現は、bob、book、boot などに一致します。この例では、ピリオド (.) をプラス記号 (+) と組み合わせて 1 つの構文を作っています。ピリオド (.) はプラス記号 (+) の直後にあります。プラス記号 (+) は、文字 'o' の 1 回以上の繰り返しと一致します。ピリオド (.) は各単語の最後の文字を表すワイルド カードで、この例では 'b'、'k'、および 't' がこれに該当します。 |
@ |
最短 - 0 回または 1 回以上 正規表現の直前にある文字の 0 回以上の繰り返しのうち、最も短いものに一致します。 .@ という正規表現は、1 つの文字の 0 回以上の繰り返しに一致します。 たとえば、正規表現 a.@x は、'abxbxb' 内では 'abx' と一致し、'acxcxc' 内では 'acx' と一致します。この例では、ピリオド (.) をアット記号 (@) と組み合わせて 1 つの構文を作っています。ピリオド (.) はアット記号 (@) の直前にあります。アット記号 (@) は、'a' と 'x' の間にある任意の文字の 0 回以上の繰り返しと一致します。この例では、ピリオド (.) は 'a' と 'x' の間にある 'b' と 'c' を表すワイルド カード文字です。 |
# |
最短 - 1 回以上 正規表現の直前にある文字の 1 回以上の繰り返しのうち、最も短いものに一致します。 たとえば、正規表現 si.#er は、'sicker' または 'silkier' と一致します。この例では、ピリオド (.) をシャープ記号 (#) と組み合わせて 1 つの構文を作っています。ピリオド (.) はシャープ記号 (#) の直前にあります。シャープ記号 (#) は、'si' と 'er' の間にある任意の文字の 1 回以上の繰り返しと一致します。ピリオド (.) は、sicker という単語では 'c' と 'k' を表すワイルド カード、silkier という単語では 'l'、'k'、および 'i' を表すワイルド カードです。 |
[ ] |
文字セット 角かっこ ([ ]) で囲まれた文字の中のいずれかと一致します。[a-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 タグ (タグの後ろにスペースのないもの) を検索するには、$$ という正規表現を使用します。 |
| |
OR 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 番目のタグ付き正規表現に一致する文字列が検索されます (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 つ以上のタブ文字に一致することを表します。 |
[^] |
文字セット以外の任意の 1 文字 カレット (^) の後ろにある一連の文字に含まれないすべての文字に一致します。 たとえば、特定の範囲を除くすべての文字を検索するには、角かっこ内の最初の文字としてカレット (^) を使用します。[^269A-Z] という正規表現は、2、6、9、および大文字の英字を除くすべての文字に一致します。 |
n |
繰り返しの表現 カレット (^) の直前にある正規表現の n 回の繰り返しに一致します。 たとえば、n を 4 とした正規表現、[0-9]^4 は、任意の 4 桁の数字の並びに一致します。この例は、文字構文 ([ ]) のセットに繰り返しの構文 (^n) を組み合わせて、より実践的な正規表現の使い方を示しています。 |
:a |
英数字 [a-zA-Z0-9] という正規表現と同じ意味になります。 [a-zA-Z0-9] という正規表現を使用すると、文字 (大文字または小文字) または数字の 1 回の繰り返しに一致します。「英数字オカレンス」とも呼ばれます。[a-zA-Z0-9] で英数字をすべて表す代わりに、:a という簡単な正規表現を使用して同様の検索を実行できます。 |
:b |
空白 コードまたは文字列内の空白類に一致します。 たとえば、行の先頭にある単一の空白類を検索するには、^:b という正規表現を使用します。 |
:c |
英文字 [a-zA-Z] という正規表現と同じ意味になります。すべての英文字 (大文字と小文字を含む) が検索されます。 [a-zA-Z] で英文字をすべて表す代わりに、:c という簡単な正規表現を使用して同様の検索を実行できます。 |
:d |
10 進数表現 [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 という簡単な正規表現を使用して同様の検索を実行できます。 |
:h |
16 進数表現 [0-9a-fA-F]+ という正規表現と同じ意味になる 16 進数表現です。 この正規表現は、A ~ F までの英文字 (大文字と小文字を含む) および任意の数字から構成される 16 進数を検索する場合に使用します。 たとえば、サイトの複数のページに異なる色の背景を使用しているとします。これらのページの色を黒 (000000 など) に変更したいが、現在の色の 16 進数値がわからないような場合、次の正規表現を使用すると、既存の 16 進数値をすべて検索できます。 \#:h [0-9a-fA-F] という正規表現を使用すれば検索は可能ですが、この例では、円記号 (\) とシャープ記号 (#) を、16 進数値 (:h) 構文と組み合わせています。\# は、正規表現でないシャープ記号 (#) と一致し、:h は、任意の 16 進数値シーケンスと一致します。 現在の 16 進数値を置換するには、使用したい背景色の 16 進数値を 000000 のように入力します。 |
:i |
識別子 [a-zA-Z_$][a-zA-Z0-9_$]* という正規表現に一致します。 コードを作成しているときに、プログラムのすべての識別子を検索する場合は、[a-zA-Z_$][a-zA-Z0-9_$]* という長い正規表現を入力する代わりに :i という簡単な正規表現を使用できます。 |
:n |
有理数 ([0-9]+\.[0-9]*)|([0-9]*\.[0-9]+)|([0-9]+) という正規表現と同じ意味になります。 小数点を含むすべての数字を検索する場合は、([0-9]+\.[0-9]*)|([0-9]*\.[0-9]+)|([0-9]+) という長い正規表現を入力する代わりに :n という簡単な正規表現を使用できます。 |
:q |
引用文字列 ("[~"]*")|('[~']*') と同じ意味になります。 引用符に囲まれたすべての文字列を検索する場合は、("[~"]*")|('[~']*') という長い正規表現を入力する代わりに :q という簡単な正規表現を使用できます。 |
:w |
英文字列 [a-zA-Z]+ という正規表現と同じ意味になります。 この構文を使用すると、簡単な記述で 1 つ以上の英文字 (大文字と小文字を含む) を検索できます。 |
:z |
10 進の整数 [0-9]+ という正規表現と同じ意味になります。 この構文を使用すると、簡単な記述で 0 以上の任意の数字を検索することができます。 |