Perl正则表达式从字符串中删除无效的html标记

时间:2016-10-18 08:26:33

标签: regex perl

我有一个字符串:

<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

1 个答案:

答案 0 :(得分:0)

简短的回答是,你不能希望以简单的方式实现你想要达到的目标。其他人已经竭尽全力清理无效的HTML,但结果并不总是他们想要的。

您可以尝试使用tidyp,或安装Alien::TidypHTML::Tidy。或者,甚至探索Marpa提供的内容。

但是,不,你不能使用简单的正则表达式替换来修复任意错误的HTML。