正規表現の構文
正規表現とは、テキスト本文から特定の文字列を検索する際の照合に使用する文字列を定義したものです。 正規表現は、文字パターンを検索対象の文字列と照合するためのテンプレートとして使用されます。
正規表現は、通常の文字 (a ~ z など) と、メタ文字という特殊文字で構成されます。
特殊文字
次の表は、1 文字のメタ文字のリストと、正規表現におけるメタ文字の動作を示しています。
注意
これらの特殊文字のいずれかと一致させるには、円記号 (\) を先頭に指定して、最初にこの文字をエスケープする必要があります。 たとえば、リテラル文字 "+" を検索する場合は、"\+" という表現を使用できます。
メタ文字 |
動作 |
例 |
---|---|---|
* |
直前の文字または部分式と 0 回以上一致します。 これは、{0,} と同じです。 |
zo* は、"z" や "zoo" と一致します。 |
+ |
直前の文字または部分式と 1 回以上一致します。 これは、{1,} と同じです。 |
zo+ は、"zo" や "zoo" とは一致しますが、"z" とは一致しません。 |
? |
直前の文字または部分式と 0 回または 1 回一致します。 これは、{0,1} と同じです。 ? を 他の量指定子 (*、+、?、{n}、{n,}、または {n,m}) の直後に指定すると、一致パターンが最短一致になります。 最短一致パターンでは、できるだけ少ない文字列と一致し、 既定の最長一致パターンでは、できるだけ多くの文字列と一致します。 |
zo? は、"z" や "zo" とは一致しますが、"zoo" とは一致しません。 o+? は "oooo" の 1 つの "o" と一致し、o+ はすべての "o" と一致します。 do(es)? は、"do" または "does" の "do" と一致します。 |
^ |
検索文字列の先頭と一致します。 m (複数行検索) 文字のフラグが設定されている場合は、\n または \r の直後とも一致します。 角かっこ表現で最初の文字として使用された場合は、文字セットの否定を表します。 |
^\d{3} は、検索文字列の先頭にある 3 桁の数字と一致します。 [^abc] は、a、b、c を除く任意の文字と一致します。 |
$ |
検索文字列の末尾と一致します。 m (複数行検索) 文字のフラグが設定されている場合は、\n または \r の直前とも一致します。 |
\d{3}$ は、検索文字列の末尾にある 3 桁の数字と一致します。 |
. |
改行文字 \n 以外の 1 文字と一致します。 \n を含めて任意の文字と一致させるには、[\s\S] などのパターンを指定します。 |
a.c は、"abc"、"a1c"、"a-c" などと一致します。 |
[] |
角かっこ表現の開始と終了を指定します。 |
[1-4] は、"1"、"2"、"3"、または "4" と一致します。 [^aAeEiIoOuU] は、母音以外と一致します。 |
{} |
量指定子の式の開始と終了を指定します。 |
a{2,3} は、"aa" や "aaa" と一致します。 |
() |
部分式の開始と終了を指定します。 部分式は保存して後で使用できます。 |
A(\d) は、"A0" ~ "A9" と一致します。 数字は後で使用できるように保存されます。 |
| |
複数の項目から選択します。 |
z|food は、"z" または "food" と一致します。 (z|f)ood は、"zood" または "food" と一致します。 |
/ |
JScript のリテラル正規表現パターンの開始または終了を示します。 2 番目の "/" の後に 1 文字のフラグを追加して、検索の動作を指定できます。 |
/abc/gi は、"abc" と一致する JScript のリテラル正規表現です。 g (グローバル) フラグは、パターンのすべての一致を検索することを指定します。i (大文字と小文字を区別しない) フラグは、検索で大文字と小文字の違いを無視するように指定します。 |
\ |
次に続く文字が特殊文字、リテラル、前方参照、または 8 進エスケープであることを示します。 |
\n は改行文字と一致します。 \( は "(" と一致します。 \\ は "\" と一致します。 |
角かっこ表現内では、大半の特殊文字の意味は失われ、通常文字を表します。 詳細については、「一致文字のリスト」の「角かっこ表現内の文字」を参照してください。
メタ文字
次の表は、複数文字のメタ文字のリストと、正規表現におけるメタ文字の動作を示しています。
メタ文字 |
動作 |
例 |
---|---|---|
\b |
ワード境界と一致します。ワード境界とは、単語と空白との間の位置のことです。 |
er\b は、"never" の "er" とは一致しますが、"verb" の "er" とは一致しません。 |
\B |
単語の境界以外と一致します。 |
er\B は、"verb" の "er" とは一致しますが、"never" の "er" とは一致しません。 |
\d |
任意の 10 進文字と一致します。 これは、[0-9] と同じです。 |
検索文字列が "12 345" の場合、\d{2} は "12" および "34" と一致し、 \d は "1"、"2"、"3"、"4"、および "5" と一致します。 |
\D |
10 進数字以外の任意の文字と一致します。 これは、[^0-9] と同じです。 |
\D+ は、"abc123 def" の "abc" および " def" と一致します。 |
\w |
A ~ Z、a ~ z、0 ~ 9、およびアンダースコアの任意の文字と一致します。 これは、[A-Za-z0-9_] と同じです。 |
検索文字列が "The quick brown fox…" の場合、\w+ は "The"、"quick"、"brown"、および "fox" と一致します。 |
\W |
A ~ Z、a ~ z、0 ~ 9、およびアンダースコアを除く任意の文字と一致します。 これは、[^A-Za-z0-9_] と同じです。 |
検索文字列が "The quick brown fox…" の場合、\W+ は "…" およびすべての空白と一致します。 |
[xyz] |
文字セットを指定します。 指定した文字のうちの任意の文字と一致します。 |
[abc] は、"plain" の "a" と一致します。 |
[^xyz] |
除外する文字セットを指定します。 指定した文字以外の任意の文字と一致します。 |
[^abc] は、"plain" の "p"、"l"、"i"、および "n" と一致します。 |
[a-z] |
文字の範囲を指定します。 指定した範囲に含まれる任意の文字に一致します。 |
[a-z] は、小文字の英字 "a" ~ "z" の範囲に含まれる任意の文字と一致します。 |
[^a-z] |
除外する文字の範囲を指定します。 指定した範囲に含まれない任意の文字に一致します。 |
[^a-z] は、"a" ~ "z" の範囲に含まれない任意の文字と一致します。 |
{n} |
直前の文字と正確に n 回一致します。 n には、0 以上の整数を指定します。 |
o{2} は、"Bob" の "o" とは一致しませんが、"food" の 2 つの "o" とは一致します。 |
{n,} |
少なくとも n 回一致します。 n には、0 以上の整数を指定します。 * は {0,} と同じ意味です。 + は {1,} と同じ意味です。 |
o{2,} は、"Bob" の "o" とは一致しませんが、"foooood" のすべての "o" と一致します。 |
{n,m} |
n ~ m 回一致します。 n および m には 0 以上の整数を指定します。n は m 以下です。 コンマと数字の間には空白を入れません。 ? は {0,1} と同じ意味です。 |
検索文字列が "1234567" の場合、\d{1,3} は "123"、"456"、および "7" と一致します。 |
(pattern) |
pattern と一致し、一致した文字列が保存されます。 保存された文字列は、JScript の exec Method によって返される配列要素から取得できます。 かっこ ( ) と一致させるには、"\(" または "\)" を指定します。 |
(Chapter|Section) [1-9] は "Chapter 5" と一致し、"Chapter" が後で使用できるように保存されます。 |
(?:pattern) |
pattern と一致しますが、一致した文字列は保存されず、後で使用することはできません。 "または" を意味する (|) を使用して、パターンの一部を結合するときに便利です。 |
industr(?:y|ies) は industry|industries と同じ意味です。 |
(?=pattern) |
肯定先読み。 一致の検出後、文字列の次の検索は、一致した文字列の前から開始されます。 一致した文字列は保存されず、後で使用することはできません。 |
^(?=.*\d).{4,8}$ は、パスワードの長さが 4 ~ 8 文字で、少なくとも 1 文字は数字を含むように制限を適用します。 このパターンで、.*\d は後に数字が続く任意の数の文字を探します。 検索文字列が "abc3qr" の場合、これは "abc3" と一致します。 .{4,8} は、一致したその文字列の後ではなく前から照合を開始し、4 ~ 8 文字の文字列を探します。 これは "abc3qr" と一致します。 ^ および $ は、検索される文字列の開始位置と終了位置を指定します。 これにより、検索される文字列に一致した文字の外側の文字が含まれる場合の一致を阻止します。 |
(?!pattern) |
否定先読み。 pattern に一致しない検索文字列と一致します。 一致の検出後、文字列の次の検索は、一致した文字列の前から開始されます。 一致した文字列は保存されず、後で使用することはできません。 |
\b(?!th)\w+\b は、先頭が "th" でない単語と一致します。 このパターンで、\b はワード境界を探します。 検索文字列が " quick " の場合、これは最初の空白と一致します。 (?!th) は "th" 以外の文字列を探します。 これは "qu" と一致します。 \w+ は、一致したその文字列の前から照合を開始し、単語を探します。 これは "quick" と一致します。 |
\cx |
x で指定した制御文字と一致します。 x の値は、A ~ Z または a ~ z の範囲内で指定します。 それ以外を指定すると、c はリテラル文字 "c" と認識されます。 |
\cM は、Ctrl + M または復帰文字と一致します。 |
\xn |
n (16 進数のエスケープ値) と一致します。 16 進数のエスケープ値は 2 桁である必要があります。 この表記により、正規表現で ASCII コードを使用できるようになります。 |
\x41 は "A" と一致します。 \x041 は、"\x04" の後に "1" が続くことに相当します (n は 2 桁である必要があるため)。 |
\num |
num (正の整数) と一致します。 これは、既に見つかって保存されている部分を参照します。 |
(.)\1 は、連続する 2 つの同じ文字と一致します。 |
\n |
8 進数のエスケープ値または前方参照を指定します。 \n の前に少なくとも n 個の記憶された部分式がある場合、n は前方参照になります。 それ以外の場合で n が 8 進数値 (0 ~ 7) である場合は、n は 8 進エスケープ値です。 |
(\d)\1 は、連続する 2 つの同じ数字と一致します。 |
\nm |
8 進数のエスケープ値または前方参照を指定します。 \nm の前に少なくとも nm 個の記憶された部分式がある場合、nm は前方参照になります。 \nm の前に少なくとも n 個の記憶された部分式がある場合は、n が前方参照で、リテラル m が後に続きます。 どちらの条件にも当てはまらない場合で n および m が 8 進数 (0 ~ 7) である場合、\nm は 8 進数のエスケープ値 nm と一致します。 |
\11 は、タブ文字と一致します。 |
\nml |
n が 8 進数値の 0 ~ 3 で、m と l が 8 進数値 (0 ~ 7) の場合は、8 進エスケープ値 nml と一致します。 |
\011 は、タブ文字と一致します。 |
\un |
n と一致します。n には Unicode 文字で表した 4 桁の 16 進数を指定します。 |
\u00A9 は、著作権記号 (©) と一致します。 |
印字できない文字
印字できない文字を表すエスケープ シーケンスを次の表に示します。
文字 |
一致する文字列 |
等価オプション |
---|---|---|
\f |
フォーム フィード文字。 |
\x0c および \cL |
\n |
改行文字。 |
\x0a および \cJ |
\r |
復帰文字。 |
\x0d および \cM |
\s |
空白文字。 空白、タブ、およびフォーム フィードが含まれます。 |
[ \f\n\r\t\v] |
\S |
空白以外の文字。 |
[^ \f\n\r\t\v] |
\t |
タブ文字。 |
\x09 および \cI |
\v |
垂直タブ文字。 |
\x0b および \cK |
優先順位
正規表現は、算術式と同じ要領で評価されます。つまり、左から右に評価され、優先順位も適用されます。
正規表現の各演算子の優先順位を高いものから低いものの順に次の表に示します。
演算子 |
説明 |
---|---|
\ |
エスケープ特殊文字 |
(), (?:), (?=), [] |
かっこおよび角かっこ |
*、+、?、{n}、{n,}、{n,m} |
量指定子 |
^、$、\メタ文字 |
アンカーおよびシーケンス |
| |
代替 |
文字は選択演算子よりも高い優先順位を持ちます。したがって、たとえば "m|food" は "m" または "food" に一致します。