2012-02-14 7 views
0

次のHTMLソースコードから「アクティブ」という文字列を含むアイテムを抽出しようとしています。アクティブなアイテムが最初に表示されることに注意してください。 | Pattern.CASE_INSENSITIVEとJavaの正規表現は非貪欲ではありません。

<TR class=\\w*?Item>.*?Active.*?</TD></TR> 

:ここ

は、私は(非貪欲になろうとして)使用していますREGEXですPattern.DOTALL | Pattern.MULTILINE

2番目のソースコードの代わりにソースコード全体を抽出します。

HTMLソースコード:

<TR class=Item> 
<TD style="WIDTH: 100px"><A id=ctl00_BodyContents_gvServers_ctl02_HyperLink1 onclick=javascript:turnColor(this); href="AddEditVirtualServer.aspx?ServerId=16733" target=_blank>server01</A> </TD> 
<TD></TD> 
<TD style="WIDTH: 100px"><A id=ctl00_BodyContents_gvServers_ctl02_HyperLink2 onclick=javascript:turnColor(this); href="AddEditVirtualServer.aspx?ServerId=16733" target=_blank>07D8F15</A> </TD> 
<TD style="WIDTH: 150px">IBM 8204-E8A</TD> 
<TD style="WIDTH: 150px"><SPAN>AIX - 5.3.0.0 - ML 12</SPAN></TD> 
<TD style="WIDTH: 100px">PowerPC_POWER6</TD> 
<TD style="WIDTH: 75px">1</TD> 
<TD style="WIDTH: 100px">C1-D-G13</TD> 
<TD style="WIDTH: 100px"><SPAN id=ctl00_BodyContents_gvServers_ctl02_lbLevel1SupportGroup>UNIX TEAM 1&amp;CORP</SPAN> </TD> 
<TD style="WIDTH: 100px"><SPAN id=ctl00_BodyContents_gvServers_ctl02_lbLevel2SupportGroup>UNIX TEAM 1&amp;CORP</SPAN> </TD> 
<TD style="WIDTH: 100px"><SPAN id=ctl00_BodyContents_gvServers_ctl02_lbLevel3SupportGroup>UNIX TEAM 1&amp;CORP</SPAN> </TD> 
<TD style="WIDTH: 100px">2011-04-15</TD> 
<TD style="WIDTH: 100px">Cool Down </TD> 
<TD style="WIDTH: 100px"><A id=ctl00_BodyContents_gvServers_ctl02_btnDeleteServer disabled>Delete</A> </TD></TR> 
<TR class=AlternateItem> 
<TD style="WIDTH: 100px"><A id=ctl00_BodyContents_gvServers_ctl03_HyperLink1 onclick=javascript:turnColor(this); href="AddEditVirtualServer.aspx?ServerId=19631" target=_blank>server01</A> </TD> 
<TD></TD> 
<TD style="WIDTH: 100px"><A id=ctl00_BodyContents_gvServers_ctl03_HyperLink2 onclick=javascript:turnColor(this); href="AddEditVirtualServer.aspx?ServerId=19631" target=_blank>105ABCD</A> </TD> 
<TD style="WIDTH: 150px">IBM Power 770</TD> 
<TD style="WIDTH: 150px"><SPAN>AIX - 5.3.0.0 - TL 12 SP 01</SPAN></TD> 
<TD style="WIDTH: 100px">PowerPC_POWER7</TD> 
<TD style="WIDTH: 75px">1</TD> 
<TD style="WIDTH: 100px">C1-O-G11</TD> 
<TD style="WIDTH: 100px"><SPAN id=ctl00_BodyContents_gvServers_ctl03_lbLevel1SupportGroup>UNIX TEAM 1&amp;CORP</SPAN> </TD> 
<TD style="WIDTH: 100px"><SPAN id=ctl00_BodyContents_gvServers_ctl03_lbLevel2SupportGroup>UNIX TEAM 1&amp;CORP</SPAN> </TD> 
<TD style="WIDTH: 100px"><SPAN id=ctl00_BodyContents_gvServers_ctl03_lbLevel3SupportGroup>UNIX TEAM 1&amp;CORP</SPAN> </TD> 
<TD style="WIDTH: 100px">2012-02-09</TD> 
<TD style="WIDTH: 100px">Active </TD> 
<TD style="WIDTH: 100px"><A id=ctl00_BodyContents_gvServers_ctl03_btnDeleteServer disabled>Delete</A> </TD></TR> 

あなたの助けが理解されるであろう!

+1

私はあなたが何かひどいことをしているのを見ます。 – mkoryak

+2

regexでXML/HTMLを解析しようとすると、狂気への高速なルートです。戻ってキーボードから離れて...素敵で遅いアスタリスクを静かに置いて、消えないようにしてください...次にこれを読んでくださいhttp://stackoverflow.com/questions/1732348/regex-match-open-tags- xhtml-self-contained-tags/1732454#1732454 –

+0

'。*?。*?'は同じ '。*?' – turbanoff

答えて

1

*?は、zero or more timesである。あなたは、おそらくあなたはPattern p = Pattern.compile("....", Pattern.MULTILINE); ことにより、マルチラインモードを有効にすることができますそして、あなたはおそらくあなたのパターンで</TD>.*?</TR></TD></TR>を変更する必要が<TR class=\\w+?Item>

1

をしたいです。

+0

私は実際にPattern.CASE_INSENSITIVE |を使用しています。 Pattern.DOTALL | Pattern.MULTILINE、それでも動作しません。 –

関連する問題