将多个正则表达式组与前瞻组合

时间:2016-12-03 11:46:53

标签: java regex regex-greedy

如何将3个正则表达式组合成1个表达式 - 如果可能的话? 我想获得第一个 th标记值 第一个 td 标记 id 来自 a 标记使用正确的正则表达式。我已经挣扎了一个小时,让他们全部用1个表达。这会是什么解决方案?

 regex for th tag:  
 th[^>]+l">([^<]+)</th  
 regex for td tag:  
 td>([^<]+)</td  
 regex for a tag:
 <a((?!</a).)id="([^"]+)" 

我有一个像这个片段的项目列表。

    ...
    <th scope="col">1X2</th>
    <th scope="col" class="goR">Odds</th>
    </tr></thead>
    <tbody>
    <tr class="row1">
    <td>Fortuna Köln</td>
    <td class="prc "><label><a id="MarketGroupListComponent25-selection-38225206.1" />
    ...

1 个答案:

答案 0 :(得分:1)

这是一个可能的解决方案:

(?s)th[^>]+l">(.*?)<\/th>.*?<td>(.*?)<\/td>.*?<a id="(.*?)"

您需要(?s)修饰符才能使.与换行符匹配。 3个所需的字符串分别为1,2和3组。

在这种情况下,你不需要任何前瞻。

action

中查看

注意:

这个正则表达式会因许多奇怪的情况而失败,例如:已转储\"个ID或包含thth的值。 如果您知道html有效,则可以使用Java HTML parser进行更复杂的查询。如果html无效或html结构已更改,此解析器也可能失败。