ホームページ  >  記事  >  バックエンド開発  >  php—PCRE 正規表現の内部オプション設定

php—PCRE 正規表現の内部オプション設定

伊谢尔伦
伊谢尔伦オリジナル
2016-11-21 17:21:241303ブラウズ

PCRE_CASELESS、PCRE_MULTILINE、PCRE_DOTALL、PCRE_UNGREEDY、PCRE_EXTRA、PCRE_EXTENDED、PCRE_DUPNAMES およびその他のモード修飾子設定は、perl オプション文字シーケンスを通じてモード内で設定できます。構文は次のとおりです: (? 修飾子) 使用可能な修飾子は次のとおりです。文字

i PCRE_CASELESS

m PCRE_MULTILINE

s PCRE_DOTALL

x PCRE_EXTENDED

U PCRE_UNG REEDY

X PCRE_EXTRA

J PCRE_INFO_J変更されました

たとえば、(?im) 設定はマルチ行サイズ 非依存的なマッチングを書き込みます。これを使用してこれらの設定をキャンセルすることもできます。たとえば、(?im-sx) は PCRE_CASELESS、PCRE_MULTILINE を設定しますが、同時に PCRE_DOTALL と PCRE_EXTENDED をキャンセルします。 - の前後の両方に文字が出現する場合、このオプションは設定されていません。

オプションがパターンの先頭にある (つまり、サブグループにない) 場合、変更はパターンの残りの部分に影響します。たとえば、/ab(?i)c/ は「abc」と「abC」のみに一致します。 この形式は PCRE 4.0 (PHP 4.3.3) で変更されました。以前のバージョンでは、/ab(?i)c/ は /abc/i とまったく同じように動作しました。

オプションがサブグループに設定されている場合、影響は異なります。これは Perl 5.005 の動作の変形です。 オプションがサブグループ内に設定され、サブグループの残りの部分のみが変更されるため、(a(?i)b)c は "abc" および "aBc" のみに一致します (PCRE_CASELESS オプションが使用されていないと仮定します)。 これは、オプションがパターン内の異なる場所で異なる効果を持つ可能性があることを意味します。 同じサブモード内で、1 つのブランチのオプション設定は、後続の残りのブランチに伝播します。 たとえば、(a(?i)b|c) は、「ab」、「aB」、「c」、および「C」に一致します。 ただし、「C」と一致する場合、オプションが設定される前に最初の分岐が破棄されます。 これは、オプション設定がコンパイル時に決定されるためです。そうでないと、非常に奇妙な動作が発生する可能性があります。

PCRE 固有のオプション PCRE_UNGREEDY と PCRE_EXTRA は、それぞれ文字 U と X を使用して、Perl 互換性オプションと同じ方法で変更できます。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。