2012-02-14 1 views
0

Я пытаюсь извлечь элемент, содержащий строку «Active» из следующего исходного кода HTML. Обратите внимание: Активный элемент может быть первым.Java регулярный экспресс не жадный не работает

Вот REGEX я использую (Стараясь быть не жадный):

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

с Pattern.CASE_INSENSITIVE | Pattern.DOTALL | Pattern.MULTILINE

Он извлекает весь исходный код вместо второго: ....

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

Пытаться разобрать XML/HTML с регулярным выражением - это быстрый путь к безумию. Откиньтесь от клавиатуры ... приятно и медленно, аккуратно положите эту звездочку, чтобы она не исчезла ... Затем прочитайте это http://stackoverflow.com/questions/1732348/regex-match-open-tags- except-xhtml-self-contains-tags/1732454 # 1732454 –

+0

'. *?. *?' такой же '. *?' – turbanoff

ответ

1

Вы можете включить режим многострочный по Pattern p = Pattern.compile("....", Pattern.MULTILINE); И вы, вероятно, придется изменить </TD></TR> к </TD>.*?</TR> в шаблоне.

+0

Я на самом деле использую Pattern.CASE_INSENSITIVE | Pattern.DOTALL | Pattern.MULTILINE, но он все еще не работает. –