2016-05-07 16 views
0

メッセージ:するpreg_match():未知の修飾子 'P'PHPするpreg_match不明な修飾エラー

ファイル名:コア/ Router.php

行番号:399

バックトレース:

ファイル: /home/spdcin/public_html/demo/no-waste/index.php 行:292 機能:require_once iamが2行目でこのエラーを表示しています

$key = str_replace(array(':any', ':num'), array('[^/]+', '[0-9]+'), $key); 

     // Does the RegEx match? 
     //line no 2 
     if (preg_match('#^'.$key.'$#', $uri, $matches)) 
     { 
      // Are we using callbacks to process back-references? 
      if (! is_string($val) && is_callable($val)) 
      { 
       // Remove the original string from the matches array. 
       array_shift($matches); 

       // Execute the callback using the values in matches as its parameters. 
       $val = call_user_func_array($val, $matches); 
      } 
      // Are we using the default routing method for back-references? 
      elseif (strpos($val, '$') !== FALSE && strpos($key, '(') !== FALSE) 
      { 
       $val = preg_replace('#^'.$key.'$#', $val, $uri); 
      } 

      $this->_set_request(explode('/', $val)); 
      return; 
     } 
    } 
+0

'$ key = '#p';' – Jasen

答えて

1

あなたのregexに問題があり、PHPはあなたが 'p'修飾子を適用しようとしたと考えていますが、これは無効です。

あなたはおそらく、あなたがしなければあなたの正規表現が間違っているかを知るようになるだろう:

echo '#^'.$key.'$#'; 

あなたは、ルータをプログラムしようとしているという事実は、$キーはおそらくにおける一般的な(「#P」が含まれていることを示しURL)。

解決方法:「#」文字をバックスラッシュでエスケープすることができます。 PHPドキュメントの引用: "区切り文字をパターン内でマッチングする必要がある場合は、バックスラッシュを使用してエスケープする必要があります。

+0

私は自分の問題を理解しましたが、それを克服する方法 –

0

私が正しくあなたの問題を理解していれば、このようなpreg_quoteとサラウンド$キー():

if (preg_match('#^'.preg_quote($key).'$#', $uri, $matches)) 

この機能は自動的に$キーでALL正規表現のコマンドをエスケープします。

関連する問題