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

您应该使用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 ));
于 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 回答
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);
于 2013-09-16T10:19:47.857 回答