【问题标题】:RegEx find all XML tagsRegEx 查找所有 XML 标记
【发布时间】:2016-09-05 11:27:19
【问题描述】:

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

这就是我所拥有的:

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

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

例子:

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

以上代码匹配:

Habazutty
/Habazutty
Vogons
Targ
/Targ

我只需要

Habazutty
Vogons
Targ

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

【问题讨论】:

  • 想评论否决答案和问题?有什么需要改进的吗?还是只是在一次随机的狂暴之旅?

标签: regex regex-lookarounds


【解决方案1】:

您可以简单地使用:

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

组捕获会有你的输出

【讨论】:

  • 非常好,谢谢!你在最后一个/之前错过了一次逃脱,应该是&lt;([^\/&gt;]+)[\/]*&gt;
【解决方案2】:

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

【讨论】:

  • 谢谢,非常好的解决方案!
【解决方案3】:

找到另一个解决方案:

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

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

@Redneb 的回答更简洁,更少的捕获群体,更短更花哨。

【讨论】:

  • 此外,这种负面的看法可能很昂贵。
猜你喜欢
  • 2012-10-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-05-04
  • 2017-09-10
  • 2017-07-27
  • 2015-09-29
相关资源
最近更新 更多