テキストのブロックを見つけて、変更されたテキストブロックで置き換えようとしています。何らかの理由で動作しません。私はphpDesignerエディタで次の行を実行することはできますが、完璧に動作しますが、私のlinuxウェブサーバで同じコマンドを実行しようとするとうまくいきません。php - 複数行の文字列を見つける/置き換えることができません
正規表現やその他の方法を使用していても、誰かが解決策を教えてくれますか?
テキストのブロックを見つけて、変更されたテキストブロックで置き換えようとしています。何らかの理由で動作しません。私はphpDesignerエディタで次の行を実行することはできますが、完璧に動作しますが、私のlinuxウェブサーバで同じコマンドを実行しようとするとうまくいきません。php - 複数行の文字列を見つける/置き換えることができません
正規表現やその他の方法を使用していても、誰かが解決策を教えてくれますか?
問題は多分、行末(つまりマシンvs * nix)以上です。
エディタには、特定の行末を使用してファイルを保存するオプションが必要です。あなたのプロダクション環境(* nix)と同じにすることをお勧めします。
検索文字列の改行に "\ n"の置換を試してください。一重引用符は特殊文字のエスケープシーケンスの一部を解釈しないため、二重引用符を必ず使用してください。
出典:
それはおそらく空白(改行やタブ)に関係しています。
$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 *を使用します。
パターン文字列の "s
"を使用してPCRE_DOTALL
の内部オプション設定を設定することで、この問題を回避することができました。
例:
$pattern = '# ...pattern goes here... #s';
そのパターン内の任意のドット(ピリオド)文字は、新しい行を含むものと一致します。デフォルトでは、新しい行は含まれません。
参考:私はあなたが正しいと思いますPCRE Pattern Modifiers
、いくつかの正規表現をいくつか試し/エラーをしたし、これは働いていた:/((< - )(\ R | \ n)が(\ S +)({もし! = ")(。+)({\ if})(\ r | \ n)(\ s +)( - >))/ sm – Joe