正規表現置換に基づくテンプレート エンジンは、正規表現のバックトラッキング/再帰の最大制限に簡単に遭遇する可能性があります。
通常の状況では、遅延マッチングはひどいものではなく、Discuz のテンプレート エンジンが広く使用されている制限を超えることはありません。しかし、注意を払わずに勉強しないと、簡単に間違いを犯したり、問題に遭遇したりするでしょう。
preg_* が null を返す場合、判定関数は is_null であることに注意してください。
間違いはひどいことではありませんが、デバッグを容易にするために、すべてのエラーを完全に出力するのが最善です。
エラーの原因を出力するだけでなく、一致したテキストや使用した正規表現も出力するため、デバッグが容易です。
PHPコード
コードをコピー コードは次のとおりです:
if (is_null($tmp)){
$error_code = preg_last_error();
switch($error_code){
ケース PREG_NO_ERROR :
エコー 'PREG_NO_ERROR';
ケース PREG_INTERNAL_ERROR '
エコー 'PREG_BACKTRACK_LIMIT_ERROR'; _LIMIT_ERROR:
エコー 'PREG_RECURSION_LIMIT_ERROR';
ケース PREG_BAD_UTF8_ERROR:
エコー'PREG_BAD_UTF8_ERROR';
ブレーク; ケース PREG_BAD_UTF8_OFFSET_ERROR'
ブレーク;
参考文献
1. Laruence
「最大バックトラッキング/再帰制限を理解する」規則性 (pcre)"
2、2011、PHP 中国語マニュアル
preg_last_error
上記では、PHP の正規表現の内容を含め、PHP の正規表現とテンプレート エンジンの正規表現のデバッグのヒントを紹介しています。PHP チュートリアルに興味のある友人に役立つことを願っています。