如何在java正则表达式中跨多行提取非贪婪?

时间:2011-08-05 02:41:42

标签: java regex regex-greedy

如果我有多行数据,我该如何让它变得非贪婪?我拥有的是贪婪的。

示例数据

</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);
}

2 个答案:

答案 0 :(得分:3)

Ungreedy:

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

另外,请检查:

Java Regexp: UNGREEDY flag

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

答案 1 :(得分:2)

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

.*    // greedy

.*?   // non-greedy

你到达那里 - (.*)? - 是一个贪婪的.*在一个捕获组中,所述组是可选的(?正在服务于其原始角色,作为< em>零或一量词)。