【发布时间】:2013-02-06 20:45:47
【问题描述】:
我有一些 SGML,我正试图通过在开始标签上添加结束标签来清理它们。现在,文档的结构如下:
<CAT>
<NAME>Daniel
<COLOR>White
<DESC>Daniel is a white cat <p>He was born in July</p><br />He's super cute.<p><br />He does not have any siblings.
<COUNTRY>USA
</CAT>
到目前为止,我可以使用以下正则表达式匹配一个打开的标记并捕获内容作为一个组:
<NAME>([^\\<]+)[^<] 如果内容区域内没有任何<p>、</p> 或<br /> 元素。
但如果我这样做
<DESC>([^\\<]+)[^<],模式匹配会在第一个 <p> 之前停止
我之所以使用< 作为模式的结尾是因为所有其他打开的节点都没有停止匹配的 html 元素
如何创建一个匹配包含<p>、</p>、<br /> 并在<COUNTRY> 节点之前结束的<DESC> 节点的正则表达式?
【问题讨论】:
-
HTML / SGML 不适合使用正则表达式进行解析。
-
如果不编写 DTD,我似乎找不到不同的方法,所以我只是尝试关闭打开的标签并使用实际的 XML 解析器将其解析为 XML。不过,我愿意接受建议和资源。
-
如果你有
<br/>,你就没有SGML。 SGML 不允许自闭标签。 -
@DanielHaley ISO 8879 技术勘误 2 如果在 SHORTTAG 开始标签选项中声明了 NETENABL IMMEDNET 或 NETENABL ALL,则允许自闭合标签。见en.wikipedia.org/wiki/Standard_Generalized_Markup_Language#NET