PHP Regex替换标签

时间:2013-09-16 09:44:39

标签: php regex preg-replace

我有一段文字包含:

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

没有做到这一点,有人可以帮助我。

5 个答案:

答案 0 :(得分:4)

这将做的事情:

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

- 了解使用模式分隔符和多行替换(s modifier - 在这种情况下,它引用.(点)符号)。我还添加了i修饰符,以使替换不区分大小写。

答案 1 :(得分:1)

您应该使用Pattern Modifiers

s(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 ));

答案 2 :(得分:0)

你可以试试这个

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

如果你想删除shippingaddress:那么试试这个

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

答案 3 :(得分:0)

它应该适合你:

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

答案 4 :(得分:0)

你可以试试这个:

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