Java正则表达式:获取HTML锚点(<a>...</a>)标签中的文本

6
我正在尝试获取特定标签内的文本。例如,如果我有以下内容:
<a href="http://something.com">Found<a/>

我希望能够检索出Found文本。

我正在尝试使用正则表达式实现,如果<a href="http://something.com>保持不变,那么我可以做到。

到目前为止,我有这个:

Pattern titleFinder = Pattern.compile( ".*[a-zA-Z0-9 ]* ([a-zA-Z0-9 ]*)</a>.*" );

我认为最后两部分 - ([a-zA-Z0-9 ]*)</a>.* - 是正确的,但我不知道该如何处理第一部分。


9
不要使用正则表达式解析HTML。请使用适当的XML / HTML解析器... - ircmaxell
谢谢回复,我会研究一下的 =D 不过我只需要针对一个标签进行操作,它只出现了15次...这样还算糟糕吗? - BeginnerPro
Java的正则表达式不足以解析HTML,而其他语言则可以。为什么有人会在理智的情况下使用Java进行正则表达式工作,这对我来说是完全无法理解的。 - tchrist
2个回答

6

正如他们所说,不要使用正则表达式来解析HTML。如果你意识到了这种方法的缺点并加以避免,或许你可以用它来解析HTML。尝试以下方法:

Pattern titleFinder = Pattern.compile("<a[^>]*>(.*?)</a>", Pattern.DOTALL | Pattern.CASE_INSENSITIVE);
Matcher regexMatcher = titleFinder.matcher(subjectString);
while (regexMatcher.find()) {
    // matched text: regexMatcher.group(1)
} 

将迭代字符串中的所有匹配项。

它不会处理嵌套的<a>标签,并忽略标签内的所有属性。


0

这将忽略href和任何其他属性。 - Bill the Lizard

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