ホームページ >バックエンド開発 >PHPチュートリアル >PHP_PHP チュートリアルの正規表現パターン修飾子の詳細な説明

PHP_PHP チュートリアルの正規表現パターン修飾子の詳細な説明

WBOY
WBOYオリジナル
2016-07-13 17:15:281107ブラウズ

修飾子は PHP の正規表現の重要なリファレンスです。ここで、PHP の正規表現パターン修飾子の詳細な説明を共有します。詳しく知りたい方は参考にしてください。

PHP パターン修飾子 (パターン修飾子とも呼ばれる) は、正規表現の区切り文字に加えて使用されます。これは主に、正規表現の解釈を調整し、照合、置換などの操作における正規表現の一部の機能を拡張し、正規表現の機能を強化するために使用されます。しかし、多くの場所での説明は間違っており、他の人に誤解を与えやすいため、本日、ご参考までにこの文書をまとめました。

モード補正記号 機能説明

正規表現の照合時に大文字と小文字が区別されません
m 文字列を複数行として扱います。デフォルトの通常の開始 "^" と終了 "$" は、ターゲット文字列を文字の単一の "行" として扱います (改行文字が含まれている場合でも)。修飾子に「m」を追加すると、文字列の各行の先頭と末尾は「^」の先頭と「$」の末尾を指します。
■ この修飾子が設定されている場合、一致した文字列は改行を含む 1 行として表示され、改行は通常の文字列として扱われます。
x エスケープしない限り空白を無視します。
e は、置換文字列内の後方参照に対して通常の置換を実行し、それを PHP コードとして評価し、その結果を使用して検索文字列を置換するために preg_replace() 関数でのみ使用されます。
A この修飾子を使用する場合、式は一致する文字列の先頭にある必要があります。たとえば、「/a/A」は「abcd」と一致します。
D パターンの $ 文字は、ターゲット文字の末尾と一致します。このオプションを使用しないと、ドル記号が改行文字の場合、最後の文字の前でも一致します。修飾子 m が設定されている場合、これは無視されます。
E は「m」の反対です。この修飾子を使用すると、「$」は改行文字の前ではなく、文字列の絶対的な末尾と一致します。このモードはデフォルトでオンになります。
U 貪欲モードは疑問符と同じ機能を持ちます。最大一致は貪欲モードです。

貪欲モード:

たとえば、文字「a」で始まり文字「b」で終わる文字列を一致させたいが、一致する必要がある文字列には「a」の後に「b」が多数含まれている場合、「」のようになります。 a bbbbbbbbbbbbbbbbbb" の場合、正規表現は最初の "b" または最後の "b" に一致しますか?貪欲モードを使用する場合は、最後の「b」が照合されます。それ以外の場合は、最初の「b」のみが照合されます。

PHP 正規表現貪欲モードの使用例:

1./a.+?b/
2./a.+b/U
次のように、貪欲モードを使用せずに例を比較してください:

1./a.+b/
修飾子 U が上で使用されています。詳細については、修飾子の概要を参照してください。

その他の情報:

パターン修飾子: 正規表現パターンで使用される修飾子について説明します

注: 現在 PCRE で使用されている可能性のある修飾子を以下に示します。括弧内はこれらの修飾子の内部 PCRE 名です。修飾子のスペースと改行は無視され、他の文字はエラーの原因となります。

私(PCRE_CASELESS)

この修飾子が設定されている場合、パターン内の文字は大文字と小文字の両方に一致します。

m(PCRE_MULTILINE)

デフォルトでは、PCRE はターゲット文字列を (改行が含まれている場合でも) 単一の文字「行」として扱います。 「行頭」メタキャラクタ (^) は文字列の先頭にのみ一致し、「行末」メタキャラクタ ($) は文字列の末尾、または改行の場合はその前の最後の文字にのみ一致します (改行でない場合)。 D が設定されています) 修飾子)。これはPerlと同じです。
この修飾子が設定されている場合、文字列全体の先頭と末尾に加えて、「行の先頭」と「行の末尾」も一致し、それぞれ文字列内の改行文字の後と前も一致します。これは Perl の /m 修飾子に相当します。ターゲット文字列に「n」文字がない場合、またはパターンに ^ または $ がない場合、この修飾子を設定しても効果はありません。

s(PCRE_DOTALL)

この修飾子が設定されている場合、パターン内のドット メタ文字 (.) は改行を含むすべての文字と一致します。この設定を行わないと、改行文字は含まれません。これは Perl の /s 修飾子に相当します。 [^a] などの除外文字クラスは、この修飾子が設定されているかどうかに関係なく、常に改行と一致します。

x(PCRE_EXTENDED)

この修飾子が設定されている場合、パターン内の空白文字は、エスケープされている文字または文字クラス内の文字を除いて完全に無視され、エスケープされていない文字クラスの外側の # と次の改行文字の間のすべての文字も両端を含めて無視されます。 。これは Perl の /x 修飾子に相当し、複雑なパターンにコメントを追加できます。ただし、これはデータ文字にのみ適用されることに注意してください。空白文字は、パターン内の特殊文字シーケンス (中央のシーケンス (?() など) には決して出現しない場合があります。

この修飾子が設定されている場合、preg_replace() は置換文字列内の後方参照の通常の置換を実行し、それを PHP コードとして評価し、その結果を使用して検索文字列を置換します。
preg_replace() のみがこの修飾子を使用し、他の PCRE 関数はそれを無視します。
注: この修飾子は PHP3 では使用できません。

A(PCRE_ANCHORED)

この修飾子が設定されている場合、パターンは強制的に「アンカー」されます。つまり、ターゲット文字列の先頭からのみ一致するように強制されます。この効果は、適切なモード自体を介して実現することもできます (Perl でこれを実現する唯一の方法です)。

D(PCRE_DOLLAR_ENDONLY)

この修飾子が設定されている場合、パターン内のドルのメタ文字はターゲット文字列の末尾にのみ一致します。このオプションを使用しない場合、最後の文字が改行文字の場合、ドル記号はこの文字の前でも一致します (ただし、他の改行文字の前では一致しません)。 m 修飾子が設定されている場合、このオプションは無視されます。 Perl には同等の修飾子はありません。

S

パターンが複数回使用される場合は、マッチングを高速化するために最初に分析する価値があります。この修飾子が設定されている場合、追加の分析が実行されます。現在、パターンの分析は、単一の固定開始文字を持たない非アンカー パターンにのみ役立ちます。

U(PCRE_UNGREEDY)

この修飾子は、デフォルトでは繰り返されないように一致数の値を反転しますが、後に「?」が続くと繰り返されるようになります。これは Perl と互換性がありません。このオプションは、パターン内で (?U) 修飾子を設定するか、量指定子の後に疑問符 (例: .*?) を付けることによっても有効にすることができます。

X(PCRE_EXTRA)

この修飾子は、Perl と互換性のない PCRE の追加機能を有効にします。パターン内のバックスラッシュの後に特別な意味のない文字が続くとエラーが発生するため、この組み合わせは将来の拡張のために保存されます。デフォルトでは、Perl と同様に、バックスラッシュの後に特別な意味を持たない文字が続くと、その文字自体として扱われます。現在、この修飾子によって制御される他の特性はありません。

u(PCRE_UTF8)

この修飾子は、Perl と互換性のない PCRE の追加機能を有効にします。パターン文字列は UTF-8 として扱われます。この修飾子は、Unix では PHP 4.1.0 以降、win32 では PHP 4.2.3 以降で使用できます。 PHP 4.3.5 以降、パターンの UTF-8 の有効性がチェックされます。


PHP 正規表現の基本構文:

正規表現は、区切り文字、式、修飾子の 3 つの部分に分かれています。

区切り文字には、特殊文字 (「/!」など) を除く任意の文字を使用できます。一般的に使用される区切り文字は「/」です。この式は、いくつかの特殊文字 (以下の特殊文字を参照) と特殊でない文字列で構成されます。たとえば、「[a-z0-9_-]+@[a-z0-9_-.]+」は、単純な電子メールに一致します。弦。修飾子は、特定の機能/モードをオンまたはオフにするために使用されます。完全な正規表現の例を次に示します:

/hello.+?hello/is 上記の正規表現「/」は区切り文字、2 つの「/」の間の正規表現は式、2 番目の「/」の後の文字列「is」は修飾子です。

式に区切り文字が含まれる場合は、「/hello.+?/hello/is」などのエスケープ記号「」を使用する必要があります。エスケープ記号は区切り文字として使用されるだけでなく、特殊文字を実行することもできます。文字で構成されるすべての特殊文字は、すべての数字を表す「d」などでエスケープする必要があります。

www.bkjia.comtru​​ehttp://www.bkjia.com/PHPjc/628791.html技術記事修飾子は、PHP の正規表現の重要なリファレンスです。PHP の正規表現パターン修飾子の詳細な説明を共有します。詳しく知りたい方は、リファレンスを参照してください。
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。