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

层次正则表达式

  •  3
  • Snives  · 技术社区  · 16 年前

    构建一个匹配层次数据的正则表达式是否可行?

    例如:

    <h1>Action</h1>
      <h2>Title1</h2><div>data1</div>
      <h2>Title2</h2><div>data2</div>
    <h1>Adventure</h1>
      <h2>Title3</h2><div>data3</div>
    

    我想以火柴收场。

    "Action", "Title1", "data1"
    "Action", "Title2", "data2"
    "Adventure", "Title3", "data3"
    

    这是一个.NET项目。

    3 回复  |  直到 16 年前
        1
  •  5
  •   Anon.    16 年前

    解决方法是不使用正则表达式。他们没有足够的力量做这种事。

    你想要的是 分析器

        2
  •  2
  •   Brian Lacy    16 年前

    通常认为尝试用RegEx解析HTML/XML是不好的做法,因为它是分层的。您可以使用递归函数来实现这一点,但在这种情况下,更好的解决方案是使用真正的XML解析器。如果不知道你使用的平台,我就不能给你更好的建议。

    编辑:Regex也非常慢,这是它不利于处理HTML的另一个原因;但是,我不知道XML/DOM处理器可能会更快,因为它可能会占用更多的内存。

    如果您只想从一个简单的文档中获取数据(如您所演示的),并且/或者您想自己构建一个解决方案,那么这并不是很难做到的。只需构建一个简单的、基于递归状态的流处理器,它查找标记并将内容传递到下一个递归级别。

    例如:

    - In a recursive function, seek out a "<" character.
    - Now find a ">" character.
    - Preserve everything you find until the next "<" character.
    - Find a ">" character.
    - Pass whatever you found between those tags into the recursive function.
    

    你必须自己检查错误,但是基本情况(当你返回到上一个级别时)只是在没有其他东西可以找到的时候。

    也许这有帮助,也许没有。祝你好运。

        3
  •  0
  •   Jeff B    16 年前

    您应该为此使用XML解析器。