2011-08-05 9 views
2

複数の行にまたがって多数のデータがある場合、どのようにして非貪欲にするのですか?私が持っているものは貪欲です。Javaの正規表現で複数の行に貪欲でないものを抽出するにはどうすればよいですか?

例データ

</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

アドバイスがある場合は、HTMLを正規表現で解析しないでください。来週はうまくいかないでしょう。 NekoのようなHTMLパーサーを使用します。またはHTMLUnit。 –

+2

あなたはこのスレッドの返事を読んでみたいと思うかもしれません、その面白いと本当のhttp://stackoverflow.com/questions/1732348/regex-match-open-tags-except-xhtml-self-contained-tags – KaKa

答えて

3

Ungreedyです:また

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

、この点を確認してください。

Java Regexp: UNGREEDY flag

私はUNGREEDYをJDKの正規表現用に実装しました。

+0

私はあなたの答えをupvotedしかし、私は元の質問にあなたの優れたコメントで述べたことを再び述べたいと思っています:***正規表現でHTMLを解析しないでください*** –

+0

@HovercraftFullOfEels何を使用すればよいですか? – deadfish

+0

@deadfishは専用のHTML解析ライブラリを使用しています –

1

数量詞非貪欲、あなたはその直後に疑問符を追加するには:あなたがそこに持っているもの

.* // greedy 

.*? // non-greedy 

から(.*)?は - キャプチャグループで貪欲.*で、グループはオプションであることを特徴と(?は、元の役割で、ゼロまたは1つの量指定子として機能しています)。

関連する問題