1

以下を含むテキストがあります。

[shipping_address]
<p><b>#shipping_title#</b></p>
<p>#shipping_name#<br>
  #shipping_streetNrBox#<br>
  #shipping_zipcode# #shipping_city#<br>
  #shipping_country#<br>
</p>
[/shipping_address]

php で特定の if 文が true を返す場合、ブロック全体 ([shipping_address][/shipping_address] を含む) を削除したいと考えています。私は preg_replace を使用していますが、コードについて助けが必要です。

$content = preg_replace("\[shipping_address\](.*?)\[/shipping_address\]", "" , $content);

トリックを行いません。誰かが私を助けてくれますか。

4

5 に答える 5

4

これは次のことを行います:

$sData = preg_replace('/\[shipping_address\](.*?)\[\/shipping_address\]/si', '', $sData);

-パターン区切り文字と複数行置換 (s 修飾子- この場合は.(ドット) 記号) の使用に注意してください。i大文字と小文字を区別しないように修飾子も追加しました。

于 2013-09-16T09:49:23.417 に答える
1

パターン修飾子を使用する必要があります。

■ (PCRE_DOTALL): この修飾子が設定されている場合、パターン内のドット メタキャラクタは、改行を含むすべての文字と一致します。それがない場合、改行は除外されます。この修飾子は、Perl の /s 修飾子と同等です。[^a] などの否定的なクラスは、この修飾子の設定に関係なく、常に改行文字に一致します。

<?php
$string = '123 [shipping_address]

<p><b>#shipping_title#</b></p>
<p>#shipping_name#<br>
  #shipping_streetNrBox#<br>
  #shipping_zipcode# #shipping_city#<br>
  #shipping_country#<br>
</p>
[/shipping_address] test';


var_dump( preg_replace('/\[shipping_address\].*\[\/shipping_address\]/s', '', $string ));
于 2013-09-16T09:54:06.653 に答える
0

これを試すことができます

preg_replace('/([shipping_address[^>]*])(.*?)([\/shipping_address])/i', '', $string);

配送先住所も削除したい場合:これを試してください

preg_replace('/[shipping_address[^>]*].*?[\/shipping_address]/i', '', $string);
于 2013-09-16T09:51:50.390 に答える
0

それはあなたのために働くはずです:

$content = preg_replace("/\[shipping_address\](.*[\n\r].*)*\[/shipping_address\]/", "" , $content);
于 2013-09-16T10:05:14.250 に答える