ホームページ >バックエンド開発 >PHPチュートリアル >PHP の全文字の正規一致が失敗する原因と解決策

PHP の全文字の正規一致が失敗する原因と解決策

小云云
小云云オリジナル
2018-03-31 14:31:302609ブラウズ

この記事は主に、PHP のすべての文字の通常のマッチングが失敗する原因と解決策を説明します。これが皆様のお役に立てれば幸いです。

<?php$str = &#39;
@@@@i ( PCRE_CASELESS)
如果设置了这个修饰符,模式中的字母会进行大小写不敏感匹配。@@@@
m ( PCRE_MULTILINE)&#39;;// 正则1:$preg = &#39;/@@@@(.*)@@@@/&#39;; 无法匹配换行符\n// 正则2:$preg = &#39;/@@@@(.*)@@@@/s&#39;;// \s   匹配任意一个空白符,等价于[\f\n\r\t\v]// \S   匹配除空白符以外任何字符,等价于[^\f\n\r\t\v]preg_match_all( $preg, $str, $matches);

print_r($matches);// 结果1:Array(
    [0] => Array()
    [1] => Array()
)// 结果2:Array(
    [0] => Array
        (
            [0] => @@@@i ( PCRE_CASELESS)
如果设置了这个修饰符,模式中的字母会进行大小写不敏感匹配。@@@@
        )
    [1] => Array
        (
            [0] => i ( PCRE_CASELESS)
如果设置了这个修饰符,模式中的字母会进行大小写不敏感匹配。
        )

)

PHP 正規表現修飾子:

  • i: この修飾子が設定されている場合、パターン内の文字は大文字と小文字を区別せずに一致します。

  • m: デフォルトでは、PCRE はターゲット文字列が単一の文字列で構成されているとみなします。文字行 (ただし、実際には複数行が含まれる場合があります)、「行頭」メタキャラクタ (^) は文字列の先頭にのみ一致し、「行末」メタキャラクタ (

    、設定)この修飾子は効果がありません。

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

  • x: これが修飾子として設定されている場合、パターン内の空白データ文字は一致しません。エスケープされた文字または文字クラスにない文字は常に無視され、# 文字とエスケープされていない文字クラス外の次の改行文字との間の文字も無視されます。この修飾子は Perl の /x 修飾子と同等であり、コンパイルされたパターンに次の文字を含めることができます。注: これはデータ文字にのみ適用されます。空白文字は、シーケンス (?( など) のような特殊文字シーケンスには引き続き使用できません (注釈: これで定義された特殊文字シーケンスに空白文字が含まれる場合)構文では、コンパイル エラーが発生します。例: (?( はエラーが発生します。)。

  • e: この修飾子が設定されている場合、 preg_replace() は、置換文字列の後方参照置換を実行した後、評価され、置換された文字列を PHP コードとして実行し (eval 関数メソッド)、その実行結果を実際に置換に参加する文字列として使用します。一重引用符、二重引用符、バックスラッシュ() および NULL 文字は後方参照置換中にバックスラッシュでエスケープされます。

    Tip
    请确保replacement参数由合法php代码字符串组成, 否则php将会 在preg_replace()调用的行上 产生一个解释错误.
    Note: 仅 preg_replace()使用此修饰符, 其他PCRE函数忽略此修饰符.

  • A: この修飾子が設定されている場合、モードは強制的に「アンカー」モードになります。つまり、ターゲット文字列の先頭からのみ検索するように一致を制限します。この効果は、次を使用して構築することもできます。

  • D: この変更修飾子が設定されている場合、この修飾子が設定されている場合、パターン内のドル記号メタ文字はターゲット文字列の末尾にのみ一致します。設定されていない場合、文字列が改行文字で終わる場合、ドル記号は改行文字にも一致します (ただし、前の改行文字には一致しません)。修飾子 m が設定されている場合、この修飾子は無視されます。 Perl でこの修飾子に。追加の分析が実行されます。現時点では、このパターンの分析はアンカーされていないパターンの一致にのみ適用されます (つまり、個別の固定開始文字はありません)。デフォルトでは量指定子を非貪欲にしますが、これは perl と互換性がありません。また、モード内修飾子設定 (?U) または疑問符を使用して設定することもできます。非貪欲としてマークする量指定子 (.*? など)。

    Note:
    
    在非贪婪模式, 通常不能匹配超过 pcre.backtrack_limit的字符.
  • X: this 修飾子は、Perl と互換性のない PCRE の添付機能をオンにします。パターン内のバックスラッシュの後に次の文字が続きます。特別な意味がない場合はエラーが発生します。これらの文字は、下位互換性を確保するために保存されています。デフォルトでは、Perl では、特別な意味を持たない文字が後に続くバックスラッシュは、その文字のオリジナルのテキストとみなされます。この修飾子: 内部オプション設定 (?J) は、重複した名前を持つサブグループを変更します (注釈: 内部オプションでのみ設定でき、外部 /J 設定はエラーを生成します)。

  • u: この修飾子は、perl と互換性のない追加機能を有効にします。パターン文字列は UTF-8 と見なされます。この修飾子は、PHP 4.1.0 以降の Unix バージョンおよび PHP 4.2 の Win32 バージョンで使用できます。 .3. PHP 4.3.5 はモードの UTF-8 有効性のチェックを開始します。

以上がPHP の全文字の正規一致が失敗する原因と解決策の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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