この記事は主に、PHP のすべての文字の通常のマッチングが失敗する原因と解決策を説明します。これが皆様のお役に立てれば幸いです。
<?php$str = ' @@@@i ( PCRE_CASELESS) 如果设置了这个修饰符,模式中的字母会进行大小写不敏感匹配。@@@@ m ( PCRE_MULTILINE)';// 正则1:$preg = '/@@@@(.*)@@@@/'; 无法匹配换行符\n// 正则2:$preg = '/@@@@(.*)@@@@/s';// \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) 如果设置了这个修饰符,模式中的字母会进行大小写不敏感匹配。 ) )
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函数忽略此修饰符.
Note: 在非贪婪模式, 通常不能匹配超过 pcre.backtrack_limit的字符.
以上がPHP の全文字の正規一致が失敗する原因と解決策の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。