【发布时间】:2015-07-09 10:08:51
【问题描述】:
结束标签相同时,如何根据属性替换标签?
例子:
<tag id='bold'><tag id='italic'>Hello World</tag></tag>
到
<b><i>Hello World</i></b>
这可以通过 RegEx 实现吗?还是我需要编写自定义解析方法?
注意:这是一个简化示例,不适用于 HTML 浏览器。
【问题讨论】:
-
根据你的 html 的复杂程度和标签的深度,你不能用正则表达式编写一个通用的解决方案。您可以在标记中使用
<tag>[\s\S]*?(<tag>[\s\S]*?</tag>)*[\s\S]*?</tag>... 行中的某些内容来描述可选的<tag></tag>结构,然后... 内...的另一个级别的可选标记结构等等。使用其他东西。 -
输入的是格式良好的 XML 文件吗?如果是这样,我会认真考虑使用 XSLT。
-
试试这个简洁的正则表达式:
(?s)<tag\s+id='bold'(?:(?:(?!</?tag).)|(?<c><tag\b)|(?<-c>(?<=(\b[^><]*)?)</tag>))+(?(c)(?!))</tag>并替换为<b><i>$1</i></b>(Test) 开玩笑 :] 确定解析器解决方案在这里更好。