正規表現の構文
正規表現は文字列のパターンを表すもので、通常の文字 (文字 a ~ z など) と "メタキャラクタ" と呼ばれる特殊文字で構成されます。パターンは、テキスト検索時に一致したかどうかを調べる 1 つ以上の文字列を記述したものです。正規表現は、検索対象文字列に文字パターンをマッチングさせるときのテンプレートとして機能します。
次の表に、よく使用される正規表現の例を示します。
JScript | VBScript | マッチング |
---|---|---|
/^\[ \t]*$/ | "^\[ \t]*$" | 空白行に一致します。 |
/\d{2}-\d{5}/ | "\d{2}-\d{5}" | 2 桁の数値、ハイフン、5 桁の数値で構成される ID 番号を確認します。 |
/<(.*)>.*<\/\1>/ | "<(.*)>.*<\/\1>" | HTML タグに一致します。 |
次の表は、すべてのメタキャラクタとその正規表現における機能を示したものです。
文字 | 説明 |
---|---|
\ | 次に続く文字が、特殊文字、リテラル、後方参照、8 進エスケープのいずれかであることを示します。たとえば、'n' は文字 "n" に一致し、'\n' は改行文字に一致します。また、シーケンス '\\' は "\" に一致し、'\(' は "(" に一致します。 |
^ | 入力文字列の先頭に一致します。RegExp オブジェクトの Multiline プロパティが設定されている場合、^ は '\n' または '\r' の直後の位置にも一致します。 |
$ | 入力文字列の末尾に一致します。RegExp オブジェクトの Multiline プロパティが設定されている場合、$ は '\n' または '\r' の直前の位置にも一致します。 |
* | 直前のサブ式の 0 回以上の繰り返しに一致します。たとえば、'zo*' は "z" および "zoo" に一致します。* は {0,} と同じ意味になります。 |
+ | 直前のサブ式の 1 回以上の繰り返しに一致します。たとえば、'zo+' は "zo" および "zoo" には一致しますが、"z" には一致しません。+ は {1,} と同じ意味になります。 |
? | 直前のサブ式の 0 回または 1 回の繰り返しに一致します。たとえば、'do(es)?' は "do" および "does" に一致します。? は {0,1} と同じ意味になります。 |
{n} | n は負でない整数です。ちょうど n 回の繰り返しに一致します。たとえば、'o{2}' は "Bob" の 'o' には一致しませんが、"food" の 2 つの 'o' には一致します。 |
{n,} | n は負でない整数です。n 回以上の繰り返しに一致します。たとえば、'o{2,}' は "Bob" の 'o' には一致しませんが、"foooood" のすべての 'o' 全体に一致します。'o{1,}' は 'o+' と同じ意味になります。また、'o{0,}' は 'o*' と同じ意味になります。 |
{n,m} | m および n は負でない整数です。ここで n <= m が成立します。n 回以上 m 回以下の繰り返しに一致します。たとえば、'o{1,3}' は "fooooood" の先頭から 3 つの 'o' に一致します。'o{0,1}' は 'o?' と同じ意味になります。カンマと数字の間には空白を挿入しないことに注意してください。 |
? | ほかの修飾子 (*、+、?、{n}、{n,}、{n,m}) のいずれかの直後にこの文字が続く場合、検索パターンは最小一致として機能します。最小一致パターンでは検索文字列の最小範囲に一致しますが、既定のパターンでは検索文字列の最大範囲に一致します。たとえば、文字列が "oooo" の場合、'o+?' は 1 つの 'o' だけに一致しますが、'o+' はすべての 'o' に一致します。 |
. | "\n" 以外の任意の 1 文字に一致します。'\n' を含む任意の 1 文字に一致させるには、'[.\n]' などのパターンを使用します。 |
(pattern) | pattern に一致するとともに、一致した文字列を記憶します。記憶した文字列をコレクションから取得するには、SubMatches コレクション (VBScript の場合)、または $0 ~ $9 の各プロパティ (JScript の場合) を使用します。かっこ ( ) を表す文字列に一致させるには、それぞれ '\(' または '\)' を使用します。 |
(?:pattern) | pattern に一致しますが、後で使用できるように、一致した文字列を記憶することはありません。この構文は、"or" 文字 (|) を使ってパターンの各部分を結合する場合に便利です。たとえば、'industr(?:y|ies)' は 'industry|industries' よりも効率的な正規表現です。 |
(?=pattern) | pattern で指定した文字列が続く場合に一致と見なされます (肯定先読み)。これは記憶なしの一致であり、後で使用できるように、一致した文字列を記憶することはありません。たとえば、'Windows (?=95|98|NT|2000)' は "Windows 2000" の "Windows" には一致しますが、"Windows 3.1" の "Windows" には一致しません。先読み処理は、確認した文字を処理済みとはしません。つまり、一致する検索文字列が見つかると、先読みされた文字列の直後からではなく、最後に一致した検索文字列の直後から、次の検索が始まります。 |
(?!pattern) | pattern で指定しない文字列が続く場合に一致と見なされます (否定先読み)。これは記憶なしの一致であり、後で使用できるように、一致した文字列を記憶することはありません。たとえば、'Windows (?!95|98|NT|2000)' は "Windows 3.1" の "Windows" には一致しますが、"Windows 2000" の "Windows" には一致しません。先読み処理は、確認した文字を処理済みとはしません。つまり、一致する検索文字列が見つかると、先読みされた文字列の直後からではなく、最後に一致した検索文字列の直後から、次の検索が始まります。 |
x|y | x または y のいずれかに一致します。たとえば、'z|food' は "z" または "food" に一致し、'(z|f)ood' は "zood" または "food" に一致します。 |
[xyz] | 文字セットを表します。かっこ内の任意の 1 文字に一致します。たとえば、'[abc]' は "plain" の 'a' に一致します。 |
[^xyz] | 除外する文字セットを表します。かっこ内にない任意の 1 文字に一致します。たとえば、'[^abc]' は "plain" の 'p' に一致します。 |
[a-z] | 文字範囲を表します。指定範囲に含まれる任意の 1 文字に一致します。たとえば、'[a-z]' は任意の小文字の英字 a ~ z に一致します。 |
[^a-z] | 除外する文字範囲を表します。指定範囲に含まれない任意の 1 文字に一致します。たとえば、'[^a-z]' は a ~ z の範囲に含まれない任意の 1 文字に一致します。 |
\b | 単語境界、つまり単語とスペース間の位置に一致します。たとえば、'er\b' は "never" の 'er' には一致しますが、"verb" の 'er' には一致しません。 |
\B | 単語境界でない位置に一致します。'er\B' は "verb" の 'er' には一致しますが、"never" の 'er' には一致しません。 |
\cx | x で示された制御文字に一致します。たとえば、\cM は Ctrl + M キー (改行文字) に一致します。x の値は A ~ Z または a ~ z の範囲内であることが必要です。範囲外であると、c はリテラルの 'c' 文字であると解釈されます。 |
\d | 数字に一致します。[0-9] と同じ意味になります。 |
\D | 数字以外の 1 文字に一致します。[^0-9] と同じ意味になります。 |
\f | フォームフィード文字に一致します。\x0c および \cL と同じ意味になります。 |
\n | 改行文字に一致します。\x0a および \cJ と同じ意味になります。 |
\r | 改行文字に一致します。\x0d および \cM と同じ意味になります。 |
\s | 空白、タブ、フォームフィードなど任意の空白文字に一致します。[\f\n\r\t\v] と同じ意味になります。 |
\S | 空白文字以外の任意の 1 文字に一致します。[^ \f\n\r\t\v] と同じ意味になります。 |
\t | タブ文字に一致します。\x09 および \cI と同じ意味になります。 |
\v | 垂直タブ文字に一致します。\x0b および \cK と同じ意味になります。 |
\w | アンダスコアを含む単語に使用される任意の文字に一致します。'[A-Za-z0-9_]' と同じ意味になります。 |
\W | 単語に使用される文字以外の任意の文字に一致します。'[^A-Za-z0-9_]' と同じ意味になります。 |
\xn | n に一致します。ここで n は 16 進エスケープ値です。16 進エスケープ値は 2 桁である必要があります。たとえば、'\x41' は "A" に一致しますが、'\x041' は '\x04' および "1" と同じ意味になります。この構文を使うと、正規表現内で ASCII コードを使用できます。 |
\num | num に一致します。ここで num は正の整数です。記憶された一致文字列への後方参照です。たとえば、'(.)\1' は 2 つの連続した同一文字に一致します。 |
\n | 8 進エスケープ値または後方参照のいずれかを表します。\n の前に保存されたサブ式が少なくとも n 個存在する場合、n は後方参照を表します。それ以外の場合で n が 8 進数 (0 ~ 7) である場合、n は 8 進エスケープ値を表します。 |
\nm | 8 進エスケープ値または後方参照のいずれかを表します。\nm の前に保存されたサブ式が少なくとも nm 個存在する場合、\nm は後方参照を表します。\nm の前に保存されたサブ式が少なくとも n 個存在する場合、後方参照 n の後にリテラル m が続いていることを表します。それ以外の場合で n と m が 8 進数 (0 ~ 7) である場合、\nm は 8 進エスケープ値 nm に一致します。 |
\nml | n が 8 進数 (0 ~ 3) で m と l が 8 進数 (0 ~ 7) である場合、8 進エスケープ値 nml に一致します。 |
\un | n に一致します。n は、4 桁の 16 進数として表現された Unicode 文字を表します。たとえば、'\u00A9' は著作権記号 (©) に一致します。 |