PHP パターン修飾子 (パターン修飾子とも呼ばれる) は、正規表現の区切り文字に加えて使用されます。これは主に、正規表現の解釈を調整し、照合、置換などの操作における正規表現の一部の機能を拡張し、正規表現の機能を強化するために使用されます。しかし、多くの場所での説明は間違っており、他の人に誤解を与えやすいため、本日、ご参考までにこの文書をまとめました。
パターン修正記号 |
機能の説明 |
i |
と通常のマッチングでは大文字と小文字が区別されません |
m |
文字列を複数行として扱います。デフォルトの通常の開始 "^" と終了 "$" は、ターゲット文字列を文字の単一の "行" として扱います (改行文字が含まれている場合でも)。修飾子に「m」を追加すると、文字列の各行の先頭と末尾は「^」の先頭と「$」の末尾を指します。 |
s |
この修飾子が設定されている場合、一致した文字列は改行を含む 1 行として表示され、改行は通常の文字列として扱われます。 |
x |
エスケープされない限り空白を無視します。 |
e |
は、preg_replace()関数でのみ使用され、置換文字列では、通常の置換に逆参照が使用され、その(つまり、「置換文字列」)が使用されます。 PHP コード値として変換し、検索された文字列をその結果で置き換えます。
|
A |
この修飾子を使用する場合、式は一致する文字列の先頭になければなりません。たとえば、「/a/A」は「abcd」と一致します。 |
D |
パターンの $ 文字は、ターゲット文字の末尾と一致します。このオプションを使用しないと、ドル記号が改行文字の場合、最後の文字の前でも一致します。修飾子 m が設定されている場合、これは無視されます。 |
E | は "m" の逆です。この修飾子を使用すると、"$" は改行文字の前ではなく、文字列の絶対的な末尾に一致します。このモードはデフォルトでオンになります。 |
U | 貪欲モードは疑問符と同じ機能を持ちます。最大一致は貪欲モードです。 |
その他の情報:
パターン修飾子:正規表現パターンで使用される修飾子の説明
説明:現在 PCRE で使用されている修飾子を以下に示します。括弧内はこれらの修飾子の内部 PCRE 名です。修飾子のスペースと改行は無視され、他の文字はエラーの原因となります。
i (PCRE_CASELESS)
この修飾子が設定されている場合、パターン内の文字は大文字と小文字の両方に一致します。
m (PCRE_MULTILINE)
デフォルトでは、PCRE はターゲット文字列を (改行が含まれている場合でも) 文字の単一の「行」として扱います。 「行頭」メタキャラクタ (^) は文字列の先頭にのみ一致し、「行末」メタキャラクタ ($) は文字列の末尾、または改行の場合はその前の最後の文字にのみ一致します (改行でない場合)。 D はセット修飾子です)。これはPerlと同じです。 この修飾子が設定されている場合、文字列全体の先頭と末尾に加えて、「行の先頭」と「行の末尾」も一致し、それぞれ文字列内の改行文字の後と前も一致します。これは Perl の /m 修飾子に相当します。ターゲット文字列に「n」文字がない場合、またはパターンに ^ または $ がない場合、この修飾子を設定しても効果はありません。
s (PCRE_DOTALL)
この修飾子が設定されている場合、パターン内のドット メタ文字 (.) は改行を含むすべての文字と一致します。この設定を行わないと、改行文字は含まれません。これは Perl の /s 修飾子に相当します。 [^a] などの除外文字クラスは、この修飾子が設定されているかどうかに関係なく、常に改行と一致します。
x (PCRE_EXTENDED)
この修飾子が設定されている場合、パターン内の空白文字は、エスケープされている文字クラスまたは文字クラス外の空白文字と、次の改行文字間のすべての文字を除き、完全に無視されます。両端も無視されます。これは Perl の /x 修飾子に相当し、複雑なパターンにコメントを追加できます。ただし、これはデータ文字にのみ適用されることに注意してください。空白文字は、条件付きサブパターン (?( が真ん中にあります。
e
) を導入するシーケンスなど、パターン内の特殊文字シーケンスには決して出現しません。この修飾子が設定されている場合、置換文字列内の preg_replace() は通常の置換を実行します。後方参照では、それを PHP コードとして評価し、検索された文字列をその結果で置き換えます。 preg_replace() のみがこの修飾子を使用します。他の PCRE 関数はそれを無視します。 注: この修飾子は、PHP3 では使用できません。 PCRE_ANCHORED)
この修飾子が設定されている場合、パターンは強制的に「アンカー」されます。つまり、ターゲット文字列の先頭からのみ一致するように強制されます。この効果は、適切なパターン自体によって渡すこともできます。 Perl でこれを行う唯一の方法)。
D (PCRE_DOLLAR_ENDONLY)
この修飾子が設定されている場合、このオプションを使用しない場合、パターン内のドルのメタ文字は、最後の文字が の場合にのみ一致します。改行文字の場合、ドル記号はこの文字の前にも一致します (ただし、他の改行文字の前には一致しません)。この修飾子が設定されている場合、パターンの分析は単一の固定開始文字を持たない非アンカー パターンに対してのみ実行されます。 (PCRE_UNGREEDY)
この修飾子は、デフォルトでは繰り返されないように一致カウントの値を反転しますが、これは重複します。これは Perl と互換性がありません。パターン内で (?U) 修飾子を設定するか、疑問符 (.*? など) を続けます (PCRE_EXTRA)
この修飾子は、パターン内のバックスラッシュと互換性のない PCRE の追加機能を有効にします。特別な意味を持たない文字を使用するとエラーが発生するため、この組み合わせは Perl と同様に、デフォルトではその文字自体として扱われます。現在、これによって制御される機能はありません。 modifier
u (PCRE_UTF8)
この修飾子は、Perl と互換性のない PCRE の追加機能です。Unix では PHP 4.1.0 以降で使用できます。 win32 での PHP 4.2.3 5 以降では、パターンの UTF-8 の有効性を確認します。