2012-03-03 9 views
1

私は正規表現を初めて使い、RegExrを使って次のパターンをチェックしましたが、preg_replaceを使ってPHPで失敗します。Regexは 'RegExr'では動作しますが、preg_replaceでは動作しませんか?

私は余分なバックスラッシュを追加して、最初の\を逃すことを試みました。

正しい方向に私を指し示す助けがあれば幸いです。

例:

$output = preg_replace("/\[if](.*)[/if/]*/", ' ', $output); 

私が修正しようとしている文字列は次のとおりです:

[if] <p>A statement goes here</p> [/if] 
+0

あなたはまた、いくつかの 'のerror_reporting(〜0)'を可能にしたことがありますか? – mario

+1

[PHP RegexとUNCパスのマッチングの可能性のある複製](http://stackoverflow.com/questions/9485091/php-regex-for-matching-a-unc-path) - それは何が起こるかについての洞察になるかもしれませんPHP文字列で書かれた正規表現をスラッシュします。これらのオンラインツールのほとんどは、PHP文字列を与えるのではなく、正規表現だけを提供します。あなたはそれをPHPのためにエンコードし、追加のステップで処理する必要があります。 – hakre

+1

変更しようとしている文字列のサンプルで質問を編集してください。それらの大括弧が正規表現ロジックの一部か、あなたがマッチさせようとしているものの一部かどうかはわかりません。 –

答えて

3
  1. エスケープすべて[
    $output = preg_replace("\[if](.*)[/if/]*", ' ', $output); 
    

    は私もスラッシュを追加しようとしましたあなたの場合は]さんのそれはリテラルを意味します。
  2. デリミタが必要です。
  3. パターンに区切り文字がある場合、isは代用するか、別の区切り文字を選択する必要があります(/のため%を選択しました)。
  4. 終了日]*、0回以上] ....本当にありますか?
  5. 私はungreedyを使用すると思われます。(.*?)が必要な可能性が高いですが、私はあなたに任せます。

は与える:

"%\[if\](.*)\[/if\]%" 
+0

これは理にかなっています - 説明を感謝します。私はそれを置き換え、エラーはありません - しかし文字列は置き換えられませんでしたか?文字列を質問に追加しました。 – jsuissa

+2

理由は、正規表現から最後の/を削除する必要があるということです。そこに何か[あれば]を置き換えようとしています。また、最後の*も行くことができます。 –

+0

今すぐ完璧に動作します。 $ output = preg_replace( "%\、もしあれば?)\ [/ if \]%"、 ''、$ output); ' – jsuissa

関連する問題