如何使用java中的正则表达式提取多行?

如何使用java中的正则表达式提取多行?,java,regex,Java,Regex,如果我有一堆文本,比如说HTML,但它不一定是 </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

如果我有一堆文本,比如说HTML,但它不一定是

</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> 
使用
(?s)
开关:

Pattern p = Pattern.compile("(?s)extinfo(.*?)load average")
此开关为正则表达式的其余部分打开“点匹配换行符”,这意味着它本质上将整个输入视为“一行”(换行符只是另一个字符)

如果没有此开关,模式将无法跨换行边界匹配


另外,您的正则表达式是“贪婪的”,因此我在捕获中添加了
,使其成为“不贪婪的”,这意味着它将捕获足够的内容来匹配,但不会更多。

好吧,酷。我怎样才能阻止它变得贪婪?Pattern p=Pattern.compile((?s)我对正则表达式进行了编辑,使其不贪婪-只需添加
-请参见答案您也可以使用
模式。DOTALL
开关作为
编译的第二个参数。我不知道您可以在模式本身中指定开关;谢谢。谢谢波希米亚人。我的?在我父母的外面。:)
Pattern p = Pattern.compile("(?s)extinfo(.*?)load average")