PHP Regex替换标签

I have a piece of text that contains:

[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]

In php if a certain if statements return true, I want to remove the entire block (including [shipping_address][/shipping_address]). I am using a preg_replace but I need some help with the code.

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

does not do the trick, can someone help me out please.

This will do the stuff:

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

-be aware about using pattern delimiters and multiline replacement (s modifier - in this case, it refers to . (dot) symbol). I've also added i modifier to make replacement case-insensitive.

You can try this

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

If you want to remove the shippingaddress too: then try this

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

You should use Pattern Modifiers.

s (PCRE_DOTALL): If this modifier is set, a dot metacharacter in the pattern matches all characters, including newlines. Without it, newlines are excluded. This modifier is equivalent to Perl's /s modifier. A negative class such as [^a] always matches a newline character, independent of the setting of this modifier.

<?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 ));

It should work for you:

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

You can try this:

$search = "/\[shipping_address\](.*?)\[\/shipping_address]/s";
$replace = " ";
$string = "[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]";
echo preg_replace($search,$replace,$string);