将 <br /> 的多个连接实例替换为一个 <br /> php
replace multiple connecting instances of <br /> with one single <br /> php
我正在剥离 HTML 并将所有 <div>
和 <p>
标签替换为 <br />
标签。问题是我留下了随机的 <br />
标签,例如
<br /><br /><br />
<br /><br />
<br /><br /><br /><br />
我正在处理电子邮件正文并剥离标签,例如
$comment = strip_tags($comment,'<div><p>');
$comment = preg_replace("/<p[^>]*?>/", "", $comment);
$comment = str_replace("</p>", "<br />", $comment);
$comment = preg_replace("/<div[^>]*?>/", "", $comment);
$comment = str_replace("</div>", "<br />", $comment);
我希望能够用一个 <br />
标签替换至少 2 个彼此相邻的 <br />
标签的任何实例。在这一点上,每个 <br />
都将与我所显示的完全匹配,但是......它们可能会像 <br>
、<br />
那样变化,所以只需要确保我可以将任何类型的 br 标签(当它们至少有 2 个时)替换为一个,当它们按顺序彼此相邻时。
br 标签的 "possibility" 看起来像 <br>
是基于它是否已经在我没有捕捉到的原始 HTML 中。我知道我可以做 str_replace("<br>", "<br />", $comment)
但我希望缩短我的代码而不是添加更多行。
知道怎么做吗?我确定涉及正则表达式 preg_replace
但不确定从哪里开始。
当您 运行 $comment = strip_tags($comment, '<div><p>')
时,将留下 no <br>
,因为它不是允许的标签。所以唯一的 <br />
将来自您下面的四个替换。换句话说,您只需要关心形式“<br />
”。但是处理 just <br />
与所有其他 <br>
形式在难度上没有太大区别。
无论如何,你可以使用:
$comment = preg_replace('/(\s*<br[^>]*>){2,}/', '', $comment);
<br[^>]*>
— 匹配任何类型的 <br>
标签
\s*<br[^>]*>
— 匹配 <br>
标签前的零个或多个空格
(\s*<br[^>]*>)
— 将此正则表达式分组并捕获到 </code></li>
<li><code>(…){2,}
— 匹配两个或更多这样的组。
替换将保留 last <br>
找到。
我正在剥离 HTML 并将所有 <div>
和 <p>
标签替换为 <br />
标签。问题是我留下了随机的 <br />
标签,例如
<br /><br /><br />
<br /><br />
<br /><br /><br /><br />
我正在处理电子邮件正文并剥离标签,例如
$comment = strip_tags($comment,'<div><p>');
$comment = preg_replace("/<p[^>]*?>/", "", $comment);
$comment = str_replace("</p>", "<br />", $comment);
$comment = preg_replace("/<div[^>]*?>/", "", $comment);
$comment = str_replace("</div>", "<br />", $comment);
我希望能够用一个 <br />
标签替换至少 2 个彼此相邻的 <br />
标签的任何实例。在这一点上,每个 <br />
都将与我所显示的完全匹配,但是......它们可能会像 <br>
、<br />
那样变化,所以只需要确保我可以将任何类型的 br 标签(当它们至少有 2 个时)替换为一个,当它们按顺序彼此相邻时。
br 标签的 "possibility" 看起来像 <br>
是基于它是否已经在我没有捕捉到的原始 HTML 中。我知道我可以做 str_replace("<br>", "<br />", $comment)
但我希望缩短我的代码而不是添加更多行。
知道怎么做吗?我确定涉及正则表达式 preg_replace
但不确定从哪里开始。
当您 运行 $comment = strip_tags($comment, '<div><p>')
时,将留下 no <br>
,因为它不是允许的标签。所以唯一的 <br />
将来自您下面的四个替换。换句话说,您只需要关心形式“<br />
”。但是处理 just <br />
与所有其他 <br>
形式在难度上没有太大区别。
无论如何,你可以使用:
$comment = preg_replace('/(\s*<br[^>]*>){2,}/', '', $comment);
<br[^>]*>
— 匹配任何类型的<br>
标签\s*<br[^>]*>
— 匹配<br>
标签前的零个或多个空格(\s*<br[^>]*>)
— 将此正则表达式分组并捕获到</code></li> <li><code>(…){2,}
— 匹配两个或更多这样的组。
替换将保留 last <br>
找到。