在Java中组合正则表达式

在Java中组合正则表达式,java,regex,Java,Regex,我对一个用Java从html表中提取信息的程序有一些问题。 为了从每一列中提取信息,我使用以下正则表达式: <td>([^<]*)</td> ([^(.*)) 这也非常有效。 但有时我需要链接所在列的信息。因此,我想将这些正则表达式与: <td>([^<]*)</td>|<a[^>]*>(.*?)</a> ([^(.*)) 我以为它会这样工作: 它可以得到介于和之间的所有东西 如果这个东西是一个链

我对一个用Java从html表中提取信息的程序有一些问题。 为了从每一列中提取信息,我使用以下正则表达式:

<td>([^<]*)</td>
([^(.*))
这也非常有效。 但有时我需要链接所在列的信息。因此,我想将这些正则表达式与:

<td>([^<]*)</td>|<a[^>]*>(.*?)</a>
([^(.*))
我以为它会这样工作:

  • 它可以得到介于
    之间的所有东西

  • 如果这个东西是一个链接,那么它也只能得到链接名

但这是行不通的。我在正则表达式方面不是最好的,所以我需要帮助将这两个步骤结合起来

非常感谢。

我正在使用的代码:

Pattern pattern = Pattern.compile("<td>([^<]*)</td>|<a[^>]*>(.*?)</a>");

String line = "Here are the lines saved from the HTML downloader";

Matcher matcher = pattern.matcher(line);
for (int startPoint = 0; matcher.find(startPoint); startPoint = matcher.end())
   {
        System.out.prinln(matcher.group(1));
   }
Pattern=Pattern.compile(([^(.*));
String line=“以下是从HTML下载程序保存的行”;
匹配器匹配器=模式匹配器(线);
for(int startPoint=0;matcher.find(startPoint);startPoint=matcher.end())
{
系统输出原则(匹配组(1));
}

这只是一个片段,但它通常是这样工作的。(通常字符串保存在数组中)。

“我对用Java从html表中提取信息的程序有一些问题。”不要用正则表达式解析html这是什么意思?请给我们你正在使用的代码,并给我们一个简短的可重复的例子,清楚地说明你的问题。我知道很多人不喜欢用正则表达式解析html。但它一直对我有效。我知道一定有可能将其结合起来。
matcher.group(1)
如果找到链接,则返回
null
。它们已经组合在一起。要合并到单个捕获组中,Java必须执行分支重置,这是不执行的。在每次匹配时,两个组中的一个组将为
null
,另一个组不会。您所要做的就是检查哪一个。不要将
null
与空字符串混淆.我现在试着和JSoup一起解析所有这些东西,效果好多了-但是谢谢你们的帮助!
Pattern pattern = Pattern.compile("<td>([^<]*)</td>|<a[^>]*>(.*?)</a>");

String line = "Here are the lines saved from the HTML downloader";

Matcher matcher = pattern.matcher(line);
for (int startPoint = 0; matcher.find(startPoint); startPoint = matcher.end())
   {
        System.out.prinln(matcher.group(1));
   }