我正在寻找正则表达式模式来验证我的 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
这些组可能看起来有点傻,但我也尝试过(.*?),即使使用惰性模式,他也只会匹配整行。
现在,第二部分(< link > 部分)将匹配,但不会与 < title > 部分组合。我猜我的空白字符 (\s) 与新行不匹配?如何仅检查换行符?
可用链接的数量是动态的,所以我不知道有多少个标签。如何使用模式的后半部分作为可重复模式?我想做这样的事情(这显然行不通):
[ <link>Download:</link> <a href="([^"]+?)">hier</a> \| ([^<]+?)<br />\s ]*
这一切都是通过 MULTILINE 选项集完成的(尽管我不太确定我想做的事情是否需要它)。
我已经尝试了一些不同的事情几天了,但没有取得任何进展,我真的很感激一些指向正确方向的指示,谢谢。
最佳答案
使用适当的 HTML 解析器,例如 jsoup对于此类任务;正则表达式适用于非常简单的情况,但很快就会变得难以使用。 HTML 解析器的实现会更快、更容易、更正确,尤其是当您开始进行更高级的测试时。
关于java - 正则表达式:匹配多行输入的模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9166024/