我正在剥离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>
的br标签的“可能性”是基于它是否已经在我没有捕获的原始HTML中。我知道我可以做str_replace("<br>", "<br />", $comment)
,但我希望缩短我的代码而不添加更多行。
知道怎么做吗?我确定有正则表达式和preg_replace
,但不知道从哪里开始。
答案 0 :(得分:1)
当您运行$comment = strip_tags($comment, '<div><p>')
时,会有否 <br>
,因为它不是允许的标记。因此,唯一的<br />
将来自您的四个替代品。您只需关心表格&#34; <br />
&#34;换句话说。但是处理只是 <br />
与所有其他<br>
形式的难度并不相同。
无论如何,你可以使用:
$comment = preg_replace('/(\s*<br[^>]*>){2,}/', '\1', $comment);
<br[^>]*>
- 匹配任何类型的<br>
代码\s*<br[^>]*>
- 在<br>
代码(\s*<br[^>]*>)
- 将此正则表达式分组并捕获到\1
(…){2,}
- 匹配两个或更多此类群组。替换将保持找到 last <br>
。