基本的なメタ文字
文字 | 説明 | 補足・例 |
---|---|---|
. | 改行以外の任意の一文字 | /b..k/ は、book, backの文字列にマッチします |
? | 直前の正規表現の0回 または 1回に一致で、{0,1}の量指定と同じ | /ax?d/ は、xの文字が0回か、1回にマッチするので、以下列挙文字列で太字がマッチ範囲です。"adg", "axdg" |
* | 直前の正規表現の0回以上の繰り返しに一致で、{0,}の量指定と同じ | /ax*d/ は、xの文字が0回以上でマッチするので、以下列挙文字列で太字がマッチ範囲です。"adg", "axdg", "axxdg", "axxxdg" |
+ | 直前の正規表現の1回以上の繰り返しに一致で、{1,}の量指定と同じ | /ax+d/ は、xの文字が1回以上でマッチするので、以下列挙文字列で太字がマッチ範囲です。 "axdg", "axxdg", "axxxdg"("adg" は、マッチしません) |
^ | 先頭に一致 | /^ab/ は、abの文字列から始まる"abcde"の太字がマッチ範囲です。"aabcde"はabが先頭でないためマッチしません。 |
$ | 終端に一致 | /yz$/ は、yzの文字列で終わる"wxyz"の太字がマッチ範囲です。"wxyzz"はyzが終端でないためマッチしません。 |
[] | [ ]内の文字のどれかに一致 | /([abc])/は、"(a)"または、"(b)"または、"(c)"にマッチします。また、/[0-9]/で数字の文字にマッチします |
[^ ] | [ ]内以外の文字と改行以外の一文字に一致 | /xy[^abc]z/は、"xyez"や、"xyfz"などにマッチします。 |
| | 正規表現の論理和 | /a[+|-]b/ は、/a[+-]bと同じになります。つまり"a+b"または"a-b"とマッチします。 |
() | グループ化 | ()内の並びで、正規表現のまとまりを作ります。これにより、複数の文字列に対して | の論理和が可能になります。 例えば /a(bc|BC)d/は、"abcd"や"aBCd"とマッチします。またプログラム言語によっては、グループ化された部分の順次抽出ができます。 |
{n,m} | n回以上で、m回以下に一致とする量指定 | /t[0-9]{3,5}/は、"t123.txt"の太字がマッチ範囲です。"t123456.txt"では5回を超える部分がマッチしません。 |
{n,} | n回以上で一致とする量指定 | /t[0-9]{3,}/は、"t123.txt"の太字がマッチ範囲です。"t12.txt"の"t12"では3回以上の繰り返しに達していないのでマッチしません。 |
{n} | n回で一致とする量指定 | /t[0-9]{3}\.txt/は、"t123.txt"で、ぴったり3つの数字がないとマッチしません。 |
上記の記号文字のマッチ判定では、 \ を前に付けます。
例えば"(ab.c)"とマッチさせる正規表現は、
"\(ab\.c\)"と書きます。
つまり、"("や"."や")"の前に
"\"を付けます。
Javaやphp言語のように文字列表現で、"\"に意味がある言語で、
その文字列内で正規表現を指定する場合は、"\\"と2つ並べる必要があり、
注意が必要です。例 "\\(ab\\.c\\)"と書きます。
ですから \ の文字にマッチさせる場合、\\\\と4つ並べて2つ\\を表現します。
このように、"\"に続く表現で、特殊な意味をもたせることを
エスケープシーケンスと呼びますが、
上記以外にも、"\"のエスケープシーケンスを使った次のメタ文字があります。
文字 | 意味 |
---|---|
\d | [0-9]のと同じで、1文字の数字 |
\D | [^0-9]と同じで、1文字の数字以外 |
\w | [a-zA-Z0-9_]と同じで、 アルファベット、数字、下線 いずれかの1文字 |
\W | [^a-zA-Z0-9_]と同じで、 アルファベット、数字、下線 いずれでもない1文字 |
\s | [\r\t\n\f]と同じで、スペースや復帰文字、タブ、改行文字、ラインフィードのいずれかの1文字(→空白文字と呼ぶ) |
\S | [^\r\t\n\f]と同じで、1文字の空白文字以外 |
\b | 単語の境界にマッチする |
\B | 単語の境界以外にマッチする |
以下にいくつかの例を示します。
例 | 説明 |
---|---|
/a.*c/ | "ac", "aXc", "aXYc", "aXYZc" など、aの文字から始まってcで終わり、aとcの間に0文字以上の任意文字があれば適合します。 |
/a.+c/ | "aXc", "aXYc", "aXYZc" など、aの文字から始まってcで終わり、aとcの間に1文字以上の任意文字があれば適合します。("ac"は、間に文字がないので適合しません) |