正则表达式:匹配多行输入的模式

时间:2012-02-06 19:30:21

标签: java regex multiline

我正在寻找一个Regex模式来验证我的HTML-Input是否具有正确的结构,并且(可能在第二步中)从中提取一些信息。

示例输入文字:

<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. 现在第二部分(&lt; link&gt;部分)将匹配,但不会与&lt;标题&gt;一。我猜我的空白字符(\ s)与新行不匹配?如何仅查看换行符?

  2. 可用链接的数量是动态的,所以我不知道有多少&lt;链接&gt;标签有。如何将图案的后半部分用作可重复的图案?我喜欢做这样的事情(显然不会这样做):

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

  3. 这一切都是通过MULTILINE选项设置完成的(尽管我不太确定它是否需要我想做的事情。)

    我现在尝试了几天不同的事情并没有到达任何地方,我真的很感激指向正确的方向,谢谢。

2 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:0)

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