Java正则表达式提取a标签之间的数据

6

我正在尝试从Java字符串中提取a href标签之间的数据。我可以使用replaceAll、substring和indexOf等方法来实现。

我想知道如何使用正则表达式来获取数据。

基本上,我正在尝试提取数据并将其存储在一个字符串或列表中。

String data ="12345";
        String sampleStr ="";
        for(int i=0; i<10; i++) {
         data+=i;
        sampleStr += "<a href=\"javascript:yyy_getDetail(\'"+data+"\')\">"+data+"</a>"+", ";
        }           

        System.out.println(sampleStr);
        String temp = sampleStr.substring(sampleStr.indexOf("\">")+2);

如果您有任何建议,将不胜感激。我应该使用什么正则表达式才能只提取数据。


2
你尝试过使用HTML解析器将HTML解析为DOM吗? - Mike Samuel
以下是一个正则表达式的起点:/<a[^>]*>(.*?)<\/a>/ - user5398447
2个回答

3

这里有一个符合您需求的示例。请注意,完全匹配将包含带有锚链接的字符串,您搜索的内容在第1组中。

String data ="12345";
String sampleStr ="";
for(int i=0; i<10; i++) 
{
 data+=i;
 sampleStr += "<a href=\"javascript:yyy_getDetail(\'"+data+"\')\">"+data+"</a>"+", ";
} 

Pattern pattern = Pattern.compile("<a[^>]*>(.*?)</a>");
Matcher matcher = pattern.matcher(sampleStr );
while (matcher.find()) 
{
        System.out.println("Result "+ matcher.group(1));
}

1
@ Nomad 对不起,您应该传递整个搜索字符串。请尝试我的编辑。 - VladL
谢谢,非常好用。你能解释一下 group 部分吗?你提到我只需要 group(1)? - Nomad
1
@Nomad 匹配组是整个匹配中用圆括号括起来的部分,在我的模式中有一个组。但是你可以将其更改为 "<a[^>]>(.?)(</a>)",这样就有了2个匹配组,调用 matcher.group(2) 将返回 "</a>"。group(0) 将返回整个匹配。 - VladL

1

我想给你点赞,但你没有提供他可以使用的Java HTML解析器的链接。 - Spencer Rathbun
为他添加了一个链接让他去看看。我对Java XML解析器并不是很有经验,所以我认为那个问题应该更好 :) - wei2912
感谢Spencer和wei2912。 - Nomad

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,