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

标签 java regex multiline

我正在寻找正则表达式模式来验证我的 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. 现在,第二部分(< link > 部分)将匹配,但不会与 < title > 部分组合。我猜我的空白字符 (\s) 与新行不匹配?如何仅检查换行符?

  2. 可用链接的数量是动态的,所以我不知道有多少个标签。如何使用模式的后半部分作为可重复模式?我想做这样的事情(这显然行不通):

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

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

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

最佳答案

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

关于java - 正则表达式:匹配多行输入的模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9166024/

相关文章:

java - 调整 JscrollPane 的大小

php - 正则表达式替换特定标记中所有出现的单个字符

php - 正则表达式不适用于多行

java - 循环小尺寸的 for() 循环是否可以花费更少的执行时间? Apex/Salesforce

java - 如何使用 FileOutputStream 将 HashMap 分成单独的行?

java - 使用 WebDriver 单击新打开的选项卡中的链接

java - 将连续的字符串数据拆分为所需的垂直输出

javascript - Javascript 匹配正则表达式的 JShint 未转义 '^' 错误

c# - WinForms ListBox 控件上的多行列表项?