RegEx 查找所有 XML 标签

RegEx find all XML tags

如何将 XML 文档中的所有开始标记与 RegEx 匹配?我只需要收集使用的标签名称。

这是我的:

(?<=<)(.*?)((?= \/>)|(?=>))

这匹配所有开始和结束标签。

示例:

<Habazutty>yaddayadda</Habazutty>
<Vogons />
<Targ>blahblah</Targ>

以上代码匹配:

Habazutty
/Habazutty
Vogons
Targ
/Targ

我只要

Habazutty
Vogons
Targ

我想不出排除结束标记的方法。负前瞻不起作用 - 什么也没发现。我一定是搞砸了。

您可以将 (?<=<)(.*?)((?= \/>)|(?=>)) 更改为 (?<=<)([^\/]*?)((?= \/>)|(?=>)),即不使用 (.*?) 作为标签名称,而是使用 ([^\/]*?)/ 无论如何都不允许出现在标签名称中。

找到另一个解决方案:

((?=<)(?!<\/)<)(.*?)((?= \/>)|(?=>))

基本上这个 ((?=<)(?!<\/)<) 会查看所有“<”(?=<) 而不是“< /” (?!<\/).

的内容

@Redneb 的回答虽然更简洁,捕获组更少,更短更漂亮。

您可以简单地使用:

<([^\/>]+)[/]*>

群抓会有你的输出