2

如果我有一堆跨多行的数据,我如何使它不贪心?我所拥有的是贪婪的。

示例数据

</TD> 
<TD CLASS='statusEven'><TABLE BORDER=0 WIDTH='100%' CELLSPACING=0 CELLPADDING=0><TR><TD             ALIGN=LEFT><TABLE BORDER=0 CELLSPACING=0 CELLPADDING=0> 
<TR> 
<TD ALIGN=LEFT valign=center CLASS='statusEven'><A HREF='extinfo.cgi?    type=2&host=localhost&service=Current+Load'>Current Load</A></TD></TR> 
</TABLE> 
</TD> 
<TD ALIGN=RIGHT CLASS='statusEven'> 
<TABLE BORDER=0 cellspacing=0 cellpadding=0> 
<TR> 
</TR> 
</TABLE> 
</TD> 
</TR></TABLE></TD> 
<TD CLASS='statusOK'>OK</TD> 
<TD CLASS='statusEven' nowrap>08-04-2011 22:07:00</TD> 
<TD CLASS='statusEven' nowrap>28d 13h 18m 11s</TD> 
<TD CLASS='statusEven'>1/1</TD> 
<TD CLASS='statusEven' valign='center'>OK &#45; load average&#58; 0&#46;01&#44; 0&#46;04&#44; 0&#46;05&nbsp;</TD> 

到目前为止,这是我的代码

Pattern p = Pattern.compile("(?s)<TD ALIGN=LEFT valign=center CLASS(.*)?<TABLE");
Matcher m = p.matcher(this.resultHTML);

if(m.find())
{
     return m.group(1);
}
4

2 回答 2

3

不贪心:

Pattern.compile("(?s)<TD ALIGN=LEFT valign=center CLASS(.*?)?<TABLE");

另外,请检查:

Java 正则表达式:UNGREEDY 标志

我已经UNGREEDY为 JDK 的正则表达式实现了。

于 2011-08-05T02:45:15.257 回答
2

要使量词不贪婪,请在其后立即添加一个问号:

.*    // greedy

.*?   // non-greedy

你在那里得到的 - (.*)?- 是捕获组中的贪婪.*者,所述组是可选的(?作为零或一量词,它以其原始角色服务)。

于 2011-08-05T04:47:36.163 回答