ホームページ  >  記事  >  バックエンド開発  >  PHP_PHP チュートリアルでの正規表現の解析とパターン マッチング

PHP_PHP チュートリアルでの正規表現の解析とパターン マッチング

WBOY
WBOYオリジナル
2016-07-21 15:05:32971ブラウズ

PHP には、テキストの正規処理のための 2 つのメソッドが用意されています。1 つは PCRE メソッドです (PCRE ライブラリは、構文とセマンティクスが Perl 5 とは若干異なる正規表現パターン マッチング関数を実装する関数のセットです (詳細は以下を参照)。現在の実装は perl 5.005 に対応しています。); もう 1 つは POSIX 方式です。

PCRE ライブラリの関数で使用されるパターン構文は、perl と非常によく似ています。式は、スラッシュ (/) などの区切り文字で閉じる必要があります。区切り文字には、バックスラッシュ () を除く、英数字以外の任意の文字を使用できます。バイトの外側にある空白以外の ASCII 文字。区切り文字を式で使用する場合は、バックスラッシュでエスケープする必要があります。PHP 4.0.4 以降では、Perl スタイルの ()、{}、[]、および < を使用できます。 ;> を区切り文字として使用します。詳細については、パターン構文を参照してください。

PCRE のパターン修飾子 (PCRE_CASELESS) を参照してください。
この修飾子が設定されている場合、パターン内の文字は大文字と小文字の両方に一致します。
s (PCRE_DOTALL)

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

m (PCRE_MULTILINE)
デフォルトでは、PCRE はターゲット文字列を (改行が含まれている場合でも) 文字の単一の「行」として扱います。 「行頭」メタキャラクタ (^) は文字列の先頭にのみ一致し、「行末」メタキャラクタ ($) は文字列の末尾、または改行の場合はその前の最後の文字にのみ一致します (改行でない場合)。 D はセット修飾子です)。これはPerlと同じです。この修飾子が設定されている場合、文字列全体の先頭と末尾に加えて、「行の先頭」と「行の末尾」も一致し、それぞれ文字列内の改行文字の後と前も一致します。これは Perl の /m 修飾子に相当します。ターゲット文字列に「n」文字がない場合、またはパターンに ^ または $ がない場合、この修飾子を設定しても効果はありません。
x (PCRE_EXTENDED)
この修飾子が設定されている場合、エスケープされていない、または文字クラスにないパターン内の空白データ文字は常に無視され、エスケープされていない文字クラス外の # 文字は常に無視されます。次の改行も無視されます。この修飾子は、コンパイルされたパターンにコメントを含めることができる、Perl の /x 修飾子に相当します。 注: これは、パターン内に空白文字が含まれる場合にのみ適用されます。条件付きサブグループを導入するシーケンス (?() などの特殊文字 (注釈: この構文で定義された特殊文字シーケンスに空白文字が出現すると、コンパイル エラーが発生します。たとえば、(?( はエラーを引き起こします) .).
e (PREG_REPLACE_EVAL)
この修飾子が設定されている場合、preg_replace() は置換文字列の後方参照置換を実行した後、置換後の文字列を PHP コード評価 (eval 関数メソッド) の行として使用します。置換に含まれる実際の文字列としての行の結果。単一引用符、二重引用符、バックスラッシュ()、および NULL 文字は、後方参照置換時にバックスラッシュでエスケープされます。
この修飾子は preg_replace() のみで使用され、他の PCRE 関数はこの修飾子を無視します。 .
A (PCRE_ANCHORED)
この修飾子が設定されている場合、パターンは強制的に「アンカーされた」パターンになります。つまり、一致はターゲット文字列からのみ開始されるように制限されます。効果は、適切なパターンを使用して構築することもできます。これが、このパターンを Perl で実装する唯一の方法です。
D (PCRE_DOLLAR_ENDONLY)
この修飾子が設定されている場合、パターン内のメタキャラクターのドル記号は、パターンの末尾のみに一致します。この修飾子が設定されていない場合、文字列が改行文字で終わる場合、ドル記号もその改行文字と一致します (ただし、この修飾子が m に設定されている場合、この修飾子は無視されます)。 Perl にはこの修飾子と同等の修飾子はありません。
S
この修飾子が設定されている場合は、時間をかけて追加の分析を行ってマッチング速度を向上させる価値があります。現在、このパターンの分析は、アンカーされていないパターンの一致 (つまり、単一の固定開始文字なし) にのみ適用されます。これは、perl と互換性がありません。モード内修飾子設定 (?U) を使用して設定するか、非としてマークすることもできます。 -greedy 量指定子の後に疑問符が付きます (.*? など)。
非 greedy モードでは、通常、pcre.backtrack_limit を超える文字は一致しません。
下位互換性 デフォルトでは、perl ではバックスラッシュが続きます。特別な意味を持たない文字によるものは、その文字のオリジナルのテキストとみなされます。
J (PCRE_INFO_JCHANGED)
内部オプション設定 (?J) は、サブグループが(注釈: 内部オプションを通じてのみ設定できます。外部 /J 設定はエラーを引き起こします。)
u (PCRE8)
この修飾子はオンになっています。Perl と互換性のない追加機能が考慮されます。 UTF-8。この修飾子は、Unix の場合は PHP 4.1.0 以降、Win32 の場合は PHP 4.2.3 以降で使用できます。この修飾子は、PCRE の追加機能を有効にします。 Perl と互換性がありません。パターン文字列は UTF-8 として扱われます。この修飾子は、Unix では PHP 4.1.0 以降、Win32 では PHP 4.2.3 で使用可能であり、PHP 4.3.5 以降ではパターンの有効性がチェックされます。

http://www.bkjia.com/PHPjc/327685.html
www.bkjia.com

tru​​e

技術記事 PHP は、テキストの通常の処理に 2 つのメソッドを提供します。1 つは PCRE メソッドです (PCRE ライブラリは、構文とセマンティクスが Perl 5 とはわずかに異なる正規表現パターン マッチングです (詳細については以下を参照)...
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。