代码之家  ›  专栏  ›  技术社区  ›  vacip

RegEx查找所有XML标记

  •  2
  • vacip  · 技术社区  · 8 年前

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

    这就是我所拥有的:

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

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

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

    以上代码匹配:

    Habazutty
    /Habazutty
    Vogons
    Targ
    /Targ
    

    我只需要

    Habazutty
    Vogons
    Targ
    

    我想不出一种方法来排除结束标记。消极展望不起作用——什么也没有发现。我一定搞砸了。

    4 回复  |  直到 8 年前
        1
  •  3
  •   Piotr Dobrogost    2 年前

    您可以通过以下方式实现这一点:

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

    组捕获将具有您的输出

        2
  •  0
  •   redneb    8 年前

    (?<=<)(.*?)((?= \/>)|(?=>)) (?<=<)([^\/]*?)((?= \/>)|(?=>)) ,即不使用 (.*?) 对于标记名,请使用 ([^\/]*?) . / 无论如何都不允许在标记名中使用。

        3
  •  0
  •   vacip    8 年前

    找到了另一个解决方案:

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

    基本上是这样的 ((?=<)(?!<\/)<) 查看所有“<” (?=<) (?!<\/) .

    @雷德内布的答案更清晰,捕捉群体更少,更简短、更有趣。

        4
  •  0
  •   Piotr Dobrogost    2 年前
    <([^ >!\/]+)[^>]*>
    

    比赛 test2 , test3 test5 在里面

    <!--test-->
    <test2>
    <test3 x="1">
    </test4>
    <test5 />