RegEx查找所有XML标记

时间:2016-09-05 11:27:19

标签: regex regex-lookarounds

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

这就是我所拥有的:

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

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

示例:

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

以上代码匹配:

Habazutty
/Habazutty
Vogons
Targ
/Targ

我只需要

Habazutty
Vogons
Targ

我无法找到排除结束标记的方法。消极的前瞻不起作用 - 什么都没找到。我一定搞砸了。

3 个答案:

答案 0 :(得分:2)

您可以使用以下方式实现此目的:

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

群组捕获将有你的输出

答案 1 :(得分:0)

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

答案 2 :(得分:0)

找到另一种解决方案:

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

基本上这个((?=<)(?!<\/)<)看起来背后的一切都是“&lt;” (?=<)而不是“&lt; /”(?!<\/)

@Redneb的答案更清晰,更少捕捉群体,更短,更漂亮。