2011-07-15 13 views
0

テキストのブロックを見つけて、変更されたテキストブロックで置き換えようとしています。何らかの理由で動作しません。私はphpDesignerエディタで次の行を実行することはできますが、完璧に動作しますが、私のlinuxウェブサーバで同じコマンドを実行しようとするとうまくいきません。php - 複数行の文字列を見つける/置き換えることができません

正規表現やその他の方法を使用していても、誰かが解決策を教えてくれますか?

答えて

2

問題は多分、行末(つまりマシンvs * nix)以上です。

エディタには、特定の行末を使用してファイルを保存するオプションが必要です。あなたのプロダクション環境(* nix)と同じにすることをお勧めします。

+0

、いくつかの正規表現をいくつか試し/エラーをしたし、これは働いていた:/((< - )(\ R | \ n)が(\ S +)({もし! = ")(。+)({\ if})(\ r | \ n)(\ s +)( - >))/ sm – Joe

0

それはおそらく空白(改行やタブ)に関係しています。

$tmp_code = preg_replace('<!--\s*{if="$membership.field_files"}\s*<li><a href="/Members/Listings.html?id={$listing.id}&action=files"><span>Files</span></a></li>\s*{else}\s* <li><a href="/Members/Listings.html?id={$listing.id}&action=files"><span>Files</span></a></li>\s*{/if}\s*-->','{if="$membership.field_files"} 
    <li><a href="/Members/Listings.html?id={$listing.id}&action=files"><span>Add/Remove Offers, Products and Files</span></a></li> 
    {else} 
    <li><a href="/Members/Listings.html?id={$listing.id}&action=files"><span>Add/Remove Offers, Products and Files</span></a></li> 
    {/if}',$tmp_code); 

あなたが入力した正確な量ではなく、行間の空白をすべて検索するために\ s *を使用します。

0

パターン文字列の "s"を使用してPCRE_DOTALLの内部オプション設定を設定することで、この問題を回避することができました。

例:

$pattern = '# ...pattern goes here... #s'; 

そのパターン内の任意のドット(ピリオド)文字は、新しい行を含むものと一致します。デフォルトでは、新しい行は含まれません。

参考:私はあなたが正しいと思いますPCRE Pattern Modifiers

関連する問題