POSIX 正規表現の構文と例
正規表現 (多くの場合、単に「regex」と表現されます) は、前のセクションで説明したワイルドカード文字を使用する式と比べて、はるかに複雑になることがあります。ワイルドカードとは異なり、正規表現は、指定されたパターンが単語内に出現する場所に関係なく、そのパターンを含む文字シーケンスと一致します。このセクションの後半で説明するように、アンカー記号「^」(単語の先頭) および「$」(単語の終わり) を使用して、単語内で正規表現をマッチングする場所を制限したり、両方のアンカー記号を指定して、そのマッチングを単語全体に制限したりすることができます。
正規表現は、さまざまな文字に特殊な意味を割り当てます。多くの場合、このような文字はメタキャラクターと呼ばれ、以下のようなものがあります。
- ピリオド、ドット、または終止符 (.) - 改行文字を除く、式内の単一幅の ASCII 文字と一致します。単一のピリオドでマルチバイト文字とのマッチングを行うには、Perl 互換正規表現を使用する必要があります (Perl 互換正規表現の構文を参照)。
正規表現のサポートは用語指向であるため、「.」は語区切り文字であるスペースやタブともデフォルトでは一致しません。例えば、正規表現「f.rm」は、「farm」、「firm」、「フォーム (Form)」などの文字シーケンスを含むあらゆる単語 (「farmer」、「firmament」、「conform」を含む) と一致します。つまり、「f」、その後に任意のその他の文字、その後に文字「rm」から成る文字シーケンスが含まれたあらゆる単語と一致します。
ヒント: 「.」記号は、ワイルドカード式の「?」文字と同等です。「.*」シーケンスは、ワイルドカード式の「*」と同等です。 - アスタリスクまたは星印 (*) - 先行するトークンにゼロ回以上一致します。例えば、正規表現「to*」は、「it」、「to」、「too」など、文字「t」とストリングを含む単語に一致します。これは、先行するトークンが単一文字「o」であり、一致する式にゼロ回出現できるためです。正規表現「f[aio]*t」の場合は、先行するトークンが「a」、「i」、または「o」のいずれかから成る文字クラスであるため、単語「fat」、「fit」、「fait」、「fiat」、および「foot」に一致します。
- 正符号 (+) - 先行するトークンに 1 回以上一致します。直前の黒丸で示した例とは対照的に、正規表現「to+」は文字シーケンス「to」および「too」を含む単語にのみ一致します。これは、先行するトークンは単一文字「o」であり、一致する式に少なくとも一度出現しなければならないためです。正規表現「f[aio]+t」の場合は、文字シーケンス「fit」、「fat」、「fait」、「fiat」、および「foot」を含む単語に一致します。これは、先行するトークンが「a」、「i」、または「o」のいずれかから成る文字クラスであり、その文字セットの少なくとも 1 つの文字が正規表現に一致するために存在しなければならないためです。
- 疑問符 (?) - 先行する文字をオプションとして識別します。例えば、正規表現「too?」は、文字シーケンス「to」および「too」を含む単語に一致します。
- 垂直バーまたはパイプ (|) - いずれか 1 つが一致する必要があるトークンを区切ります。論理 OR ステートメントと非常に似ています。例えば、正規表現「fa|i|ot」は、文字シーケンス「fa」、「i」、「fat」、または「fit」を含む単語に一致します。これは、「fa」または「i」または「ot」またはシーケンス「f and (a or i or o) and t」のいずれかと見なすことができるためです。多くの場合、「|」記号を使用する正規表現の部分は、「|」が適用されるトークンを明確にするために括弧で囲んで指定します。(例については、次の黒丸を参照してください。)
- 左括弧と右括弧 (「(」と「)」) - 複数のトークンをグループ化し、当該トークンの参照を明確化または単純化します。例えば、正規表現「f(a|i|o)t」は、文字シーケンス「fat」または「fit」を含む単語と一致しますが、語「fa」とは一致しません。これは、ここでのマッチング・シーケンスは、中央の文字が「a または i または o」のいずれかの文字に制限されている 3 つの文字から構成されている必要があるためです。
- 左大括弧 ([) と右大括弧 (]) - 一致する特定の文字または文字の範囲を囲みます。大括弧で囲まれた文字は、文字クラス と呼ばれます。例えば、正規表現「f[io]rm」は、文字シーケンス「firm」および「フォーム (Form)」を含む単語と一致しますが、「f」で始まり、「rm」で終わるその他のシーケンスを含むその他の単語には一致しません。文字クラスは、正規表現で特殊な意味を持つ別の文字が後に続く場合を除き、単一文字にのみ一致します。
- 脱字記号 (^) - 正規表現内の脱字記号は、出現する場所に応じて、以下の異なる 2 つの意味を持ちます。
- 文字クラスの最初の文字である場合、脱字記号はその文字クラスの文字を否定します。例えば、正規表現「f[^io]rm」は、「i」または「o」が 2 番目の文字である場合を除き、「f」から始まり、「rm」で終わる文字のシーケンスを含むあらゆる単語に一致します。つまり、文字シーケンス「farm」を含む単語に一致しますが、シーケンス「firm 」または「フォーム (Form)」を含む単語には一致しません。
- 正規表現の最初の文字である場合、脱字記号は用語の先頭を示します。この場合、脱字記号は通常、アンカー文字と呼ばれます。
- ドル記号 ($) - 正規表現内の最後の文字である場合、ドル記号は用語の終わりを示します。この場合、ドル記号は通常、アンカー文字と呼ばれます。注: 正規表現のマッチングを単語全体に制限する場合、アンカー文字は非常に重要です。例えば、正規表現「f[aio]rm」は、単語「farmer」、「infirm」、「former」、「conform」など、ストリング「farm」、「firm」、および「フォーム (Form)」のいずれかを含む単語と一致します。これに対して、正規表現「^f[aio]rm」は、この例では単語「farmer」と「former」にのみ一致し、正規表現「^f[air]rm$」は単語「farm」、「firm」、「フォーム (Form)」にのみ一致します。
- 円記号 (¥) - 正規表現のメタキャラクターの実際の文字値を呼び出すために使用します。例えば、正規表現「Comin?」は、単語「Coming」、「Comint」、および質問「Comin?」に一致します。. 正規表現「Comin¥?」は、質問「Comin?」にのみ一致します。.
グローバル・オプションの「HTTP Referrer Whitelist」を構成する場合、前述のリストで説明した正規表現構文のみ使用してください。ただし、正規表現構文では、印刷不能文字や特殊文字クラス (数字や英字など) とマッチングするために、複数の特殊文字シーケンスもサポートしています。完全な正規表現構文についての説明は、Watson™ Explorer Engine 資料の範囲外です。正規表現の完全な説明については、Regular Expressions Information サイトを参照してください。