如何在Java中编写正则表达式,考虑到我正在寻找的字符串的上下文?

时间:2010-01-19 04:24:55

标签: java regex

我想解析HTML代码并从表格中的文本表示创建对象。我有几列,我想在每一行保存某些列的上下文。 现在,我有HTML代码,我知道我应该使用Pattern和Matcher来获取这些字符串,但我不知道如何编写所需的正则表达式。

这是我要解析的一行:

<tr><td><a href="delirium.htm">Delirium</a></td><td>65...</tr>

所以,我想从该字符串中提取Delirium。如何编写sais

的正则表达式

获取字符串htm"></a></td>

之间的字符串

2 个答案:

答案 0 :(得分:4)

这是一个关于SO的常见问题,答案总是一样的:正则表达式是一种用于解析HTML的糟糕且有限的工具,因为HTML不是常规语言。

您应该使用an HTML parser,例如HTML Parser

如果您对“常规语言”的含义感到好奇,请查看JMD, Markdown and a Brief Overview of Parsing and Compilers。基本上,正则表达式是DFA(确定性有限自动机或确定性有限状态机)。 HTML需要PDA(下推自动机)来解析。 PDA是具有堆栈的DFA。它是处理递归元素的方式。

答案 1 :(得分:-1)

htm">(.+)</a></td>

搜索.+htm">之间的任何字符(即</a></td>位),并返回其间的内容以与Pattern.matcher()一起使用(这就是为什么有括号.+

http://www.regular-expressions.info/java.html