用PHP替换两个BR标签之间的所有内容

时间:2018-09-21 09:43:49

标签: php regex preg-replace

我该如何替换之间的所有内容:

<br />
<b>

<br />

例如:

<br />
<b>Notice</b>:  Undefined variable: XXX in <b>YYY</b> on line <b>ZZZ<br />
<b>

注意:我知道可以进行错误报告了。但是在这种情况下,我需要从一些现有的HTML代码中替换它们。

$string_to_replace = '<div>
<p>Some content</p>
<br />
<b>Notice</b>:  Undefined variable: XXX in <b>YYY</b> on line <b>ZZZ</b><br />
<p>Some other content</p>
</div>';

$string_without_warnings = preg_replace('<br \/>(.*?)<br \/>', '', $string_to_replace);

1 个答案:

答案 0 :(得分:1)

使用正则表达式解析html不是一个好主意。有关原因的说明,请参见此著名的SO帖子。 RegEx match open tags except XHTML self-contained tags

话虽如此,您所要求的当然是可能的,但是我要指出的是,取决于您传递的内容,它的行为可能与众不同/笨拙,因此我们不鼓励这样做。

首先输入您的正则表达式:https://regex101.com/r/5fvuyi/1

<br \/>\n?(?<replace>.*)<br \/>

我使用了一个命名捕获组,您可以在代码中看到它。 https://3v4l.org/uSVYZ

<?php

$string_to_replace = '<div>
<p>Some content</p>
<br />
<b>Notice</b>:  Undefined variable: XXX in <b>YYY</b> on line <b>ZZZ</b><br />
<p>Some other content</p>
</div>';

preg_match('#<br \/>\n?(?<replace>.*)<br \/>#', $string_to_replace, $match);
$new = str_replace($match['replace'], 'text replaced!', $string_to_replace);
echo $new;

哪个输出:

<div> 
    <p>Some content</p>
    <br />
    text replaced!<br />
    <p>Some other content</p>
</div>