正则表达式:以递归方式删除HTML </div>中的周围<div>标记

时间:2014-02-11 17:00:35

标签: html regex xhtml epub adobe-indesign

在有人抱怨不使用正则表达式来解析HTML之前,我引用了一个优雅的解决方案,我很快就将其标记为“已回答”另一个问题的答案抱怨不使用正则表达式来解析HTML(这是最终从我的问题中删除了):Regex: Find groups of lowercase letters between HTML tag

我再次使用epubs(在Sigil中),这次清理了InDesign CC的XHTML输出。与以前的ID版本不同,它现在围绕许多具有额外<div>标签的对象,用于某种定位/布局原因。我正在编写自己的干净CSS,因此在不生成CSS的情况下导出epub,在其他<div>周围留下无关的<div>标记,有时包含嵌套结构的不必要{{} 1}} S上。

我正在处理的一个例子:

<div>

注意:<div><!--unnecessary--> <div class="figure-box"> <h4 class="f-n"><b class="b">Figure 1.3: Foobar</b></h4> <div><!--unnecessary--> <div class="figure"> <img alt="foo" src="../Images/bar.jpg"/> </div> </div> <p class="f-ct">This is a caption, yadda yadda.</p> <p class="f-src">Source: Copyright blah blah.</p> </div> </div> 条评论是说明性的,在实际代码中不存在。

我已经编写了这个正则表达式,试图删除没有样式的<!--unnecessary-->标签,并取得了一些成功,但我希望有一个更优雅的解决方案:

<div>

上面的字符串匹配最外面的^(\s*)<div>\n\s*(<div class=".+?">.+?</div>)\n\1</div> ,然后我可以用<div>替换以保留内容和第一个缩进(尽管缩进不是绝对必要的)。

这个问题是我必须多次查找/替换所有才能获取并删除嵌套的所有不必要的\1\2

这是否会得到满足,或者是否有类似我上面为此目的链接的解决方案?

0 个答案:

没有答案