【问题标题】:Regex: Pattern matching a Multiline Input正则表达式:匹配多行输入的模式
【发布时间】:2012-02-06 19:30:20
【问题描述】:

我正在寻找一个正则表达式模式来验证我的 HTML 输入是否具有正确的结构并(可能在第二步中)从中提取一些信息。

输入文本示例:

<title>Example Title</title><br />
<link>Download:</link> <a href="URL">hier</a> | hoster1 <br />
<link>Download:</link> <a href="URL">hier</a> | hoster2 <br />
<link>Download:</link> <a href="URL">hier</a> | hoster3

标题、主机和 URL 当然可以更改并且很有趣,所以我的尝试是这样的:

<title>([^<]+?)</title><br />\s<link>Download:</link> <a href="([^"]+?)">hier</a> \| ([^<]+?)<br />\s

这些组可能看起来有点傻,但我也尝试过 (.*?),即使使用惰性模式,他也只会匹配整行。

  1. 现在第二部分( 部分)将匹配,但不能与

    部分结合。我猜我的空白字符 (\s) 与新行不匹配?如何仅检查换行符?
  2. 可用链接的数量是动态的,所以我不知道有多少 标签。如何将模式的后半部分用作可重复模式?我想做这样的事情(这显然行不通):

    [ &lt;link&gt;Download:&lt;/link&gt; &lt;a href="([^"]+?)"&gt;hier&lt;/a&gt; \| ([^&lt;]+?)&lt;br /&gt;\s ]*

这一切都是通过 MULTILINE 选项集完成的(虽然我不太确定我想做的事情是否需要它)。

我这几天尝试了一些不同的事情,但没有取得任何进展,我真的很感激一些指向正确方向的指示,谢谢。

【问题讨论】:

    标签: java regex multiline


    【解决方案1】:

    为此类任务使用适当的 HTML 解析器,例如 jsoup;正则表达式适用于非常简单的情况,但很快就会变得笨拙。 HTML 解析器将更快、更容易、更正确地实现,尤其是当您开始进行更高级的测试时。

    【讨论】:

      【解决方案2】:

      只需在需要用于 Windows 的新行字符的地方添加 [^\r\n],否则使用 [^\n]

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-11-01
        • 2020-10-10
        • 2017-10-08
        • 1970-01-01
        • 2017-07-26
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多