我有一段文字包含:
[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);
没有做到这一点,有人可以帮助我。
答案 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);