我该如何替换之间的所有内容:
<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);
答案 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>