我有一个字符串:
<div>[CODE]<br />test1</div>
<div>test2</div>
<div>test3</div>
<div>test4<br />[/CODE]</div>
使用下面的正则表达式解析时:
$text =~ s#\[CODE\](.+?)\[\/CODE\]#<div>Code:</div><pre class="prettyprint">$1</pre>#isg;
它返回<pre>
标记内的字符串,其中一些已关闭且有些开始但未关闭div,如下所示
<div><div>Code:</div><pre class="prettyprint"><br />test1</div>
<div>test2</div>
<div>test3</div>
<div>test4<br /></pre></div
我想从<pre>
标记中删除所有已关闭但未启动或未启动但未关闭的无效html标记。
它应该如下所示返回:
<div><div>Code:</div><pre class="prettyprint"><br />test1
<div>test2</div>
<div>test3</div>
test4<br /></pre></div
答案 0 :(得分:0)
简短的回答是,你不能希望以简单的方式实现你想要达到的目标。其他人已经竭尽全力清理无效的HTML,但结果并不总是他们想要的。
您可以尝试使用tidyp,或安装Alien::Tidyp和HTML::Tidy。或者,甚至探索Marpa提供的内容。
但是,不,你不能使用简单的正则表达式替换来修复任意错误的HTML。