正規表現リテラル は、
逆引用符 (`) で囲まれた文字シーケンスです。正規表現リテラル内のいくつかの文字には
特別な意味を持つものがあります。これらの文字は、円記号の後に示された場合を除いて、
特別な意味を表します。特殊文字は、.、¥、[、]、?、*、+、^、および $ です。
正規表現リテラルには、文字エスケープ・シーケンスを含めることができます。
許可されているエスケープ・シーケンスは、¥t、¥r、¥n、および ¥xdd です。
これらは、タブ、復帰、改行、および 16 進数 dd に相当する ASCII コードの文字を表します。
正規表現は再帰的な構造を持ちます。これらは、
より小さな副次式で形成されます。すべての正規表現のビルディング・ブロックは、
単一文字と一致する式です。
これらの基本式には以下の 3 つのフォームがあります。
- ピリオド (.) は、任意の単一文字と一致する正規表現です。
例えば、`.` は、a、5、#、¥n、" などと一致します。
- 特殊文字以外の文字、または円記号に続いて
示される特殊文字は、その文字と一致する正規表現です。
例えば、`a`、`5`、および `¥*` は、それぞれ a、5、および * と一致します。
- 大括弧で囲まれた文字の組み合わせは、その組み合わせの中の 1 文字と
一致する正規表現です。
例えば、`[abc]` は、a、b、または c のいずれかと一致します。
組み合わせの中の先頭文字がキャレット (^) である場合、正規表現は、
その文字の組み合わせの補数と一致します。
したがって、`[^abc]` は、a、b、および c 以外の文字と一致します。
便宜上、文字の範囲はダッシュを使用して指定できます。
この範囲には、包括的に下限と上限の間のすべての文字が含まれます。
例えば、`[a-zA-Z0-9]` はあらゆる文字や数字と一致します。
これらのビルディング・ブロックから、
より大きな正規表現を以下のようにして形成できます。
- re1 および re2 が
正規表現である場合、re1 re2 (連結) は、
フォーム s1s2 (ここで、s1 は re1 に
匹敵し、s2 は re2 に匹敵します) の文字列すべてと
一致する正規表現となります。例えば、`[ab][01]` は、a0、a1、b0、および b1 と一致します。
- re が正規表現である場合、re? は、re のゼロ個または 1 個のオカレンスと
一致する正規表現です。
例えば、`ab?` は a または ab と一致し、`a[01]?` は a、a0、または a1 と一致します。
- re が正規表現である場合、re* は、re のゼロ個以上の
オカレンスと一致する正規表現です。
例えば、`ab*` は a、ab、abb、abbb、… と
一致し、`a[01]*` は a、a0、a1、a00、a01、a11、… と一致します。
- re が正規表現である場合、re+ は、re の 1 個以上の
オカレンスと一致する正規表現です。
例えば、`ab+` は ab、abb、abbb、… と
一致し、`a[01]+` は a0、a1、a00、a01、a11、… と一致します。
注: 後置演算子
?、*、および
+ は、
連結に比べてより密にバインドします。そのため、ab* は、
(ab)* ではなく
a(b*) を意味します。
完全な
正規表現は、^ および $ をそれぞれ使用した文字列の始めまたは終わりに固定できます。
re が正規表現である場合、^re は、re に匹敵するすべてのストリングと
一致する正規表現ですが、これらのストリングが先頭にある場合に限られます。
同様に、re$ は、re に匹敵するすべてのストリングと
一致する正規表現ですが、これらのストリングが末尾にある場合に限られます。例えば、`^[01]+` は 0 および 0110 と一致しますが、a0 や a0110 とは
一致しません。また、`[01]+$` は 0 および 0110 と一致しますが、0a や 0110a とは
一致しません。