如何用我的条件替换多个preg_match模式?

时间:2014-07-17 19:47:15

标签: php regex preg-replace preg-match

如何在包含大量<br />的字符串中为替换乘法<br />创建preg_match模式。

这是替换的条件 1如果只有一个或两个<br />没有替换。

$str = "line 1<br />line 2<br /><br />line 3";
$result = "line 1<br />line 2<br /><br />line3";

2如果有两个以上<br />将它们替换为双倍。

$str = "line 1<br />line 2<br /><br /><br />line3<br /><br />";
$result = "loading<br />checking<br /><br />line3<br /><br />";

包含因为我的条件意味着我将允许最多两个<br /> 我已尝试过,但它会将所有<br />替换为仅一个。

$detail = nl2br(addslashes($_POST['detail']));
$detail = preg_replace('#(<br */?>\s*)+#i', '<br />', $detail);

我之前也搜索过这个,但没有找到任何帮助。我可能没有使用preg_replace。所以,我需要你的帮助,真的很感激。谢谢。

2 个答案:

答案 0 :(得分:2)

使用此代码:

$detail = preg_replace('#(<br\s*\/?>\s*){3,}#i', '<br /><br />', $detail);

<br><br/><br />替换为3次(或更多次)并排。它还会照顾它们之间的额外空间。

Example

答案 1 :(得分:0)

  

如果有两个以上<br />将它们替换为双倍。

它可能会帮助您使用替代。

(<br\s?\/>){3,}

DEMO

示例代码:

$re = "/(<br\\s?\\/>){3,}/i";
$str = "...";
$subst = '<br \/><br \/>';

$result = preg_replace($re, $subst, $str);