像下面这个页面,怎么用正则表达式找到第二行为空的那一列,对应第一行的日期。
比如下面这个页面,第2行第20列是空,怎么得到它上面的“18日”?备注:下面的html文档已经被读到String里了,只能用正则表达式来处理了
<HTML>
<HEAD>
<title></title>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<style type="text/css"> 
 body{font-size:9pt;font-family:宋体}
 select{font-size:9pt;font-family:宋体}
 table{font-size:9pt;font-family:宋体}
</style>
</HEAD>
<BODY topmargin=0 leftmargin=0>
<TABLE WIDTH="70%" border="0" align="center" >
<tr bgcolor="#ffffff">
<td height=20 align=left colspan=4><a href="wxkh_Day_index.asp"></a></td>
  </tr>
</TABLE>
<TABLE WIDTH="70%" border="0" align="center" cellpadding="4" cellspacing="1" bgcolor=SteelBlue class="Navbar" ID="Table1">

<tr bgcolor="#eeeeee">
<td height=40 align=center colspan=33>表头</td>
</tr>
<tr bgcolor="#eeeeee">
<td align="right" colspan="33">
<table WIDTH="100% "border="0" align="center" cellpadding="4" cellspacing="1">
<tr>
<td WIDTH="70%">&nbsp;</td>
<td WIDTH="30%" style="text-align:right; padding-right:20px;">日期:
          <SELECT id=sel_Date name=sel_Date language=javascript onChange="Date_onChange()">

<OPTION value=2013-6-1  selected>2013年6月</OPTION>

</SELECT></td>
</tr>
</table>
</td>    
</tr>
<tr bgcolor="#eeeeff">
<td align="center" width="4%">公司</td>
<td align="center" width="3%">合计</td>
<td align="center" width="3%">1日</td><td align="center" width="3%">2日</td><td align="center" width="3%">3日</td><td align="center" width="3%">4日</td><td align="center" width="3%">5日</td><td align="center" width="3%">6日</td><td align="center" width="3%">7日</td><td align="center" width="3%">8日</td><td align="center" width="3%">9日</td><td align="center" width="3%">10日</td><td align="center" width="3%">11日</td><td align="center" width="3%">12日</td><td align="center" width="3%">13日</td><td align="center" width="3%">14日</td><td align="center" width="3%">15日</td><td align="center" width="3%">16日</td><td align="center" width="3%">17日</td><td align="center" width="3%">18日</td><td align="center" width="3%">19日</td><td align="center" width="3%">20日</td><td align="center" width="3%">21日</td><td align="center" width="3%">22日</td><td align="center" width="3%">23日</td><td align="center" width="3%">24日</td><td align="center" width="3%">25日</td><td align="center" width="3%">26日</td><td align="center" width="3%">27日</td><td align="center" width="3%">28日</td><td align="center" width="3%">29日</td><td align="center" width="3%">30日</td>
</tr>
 
<tr bgcolor="#ffffee">
<td align="center">天津</td>
<td  align="center">1</td>
<td align="center" width="3%"><a href='WXKH_viewday_YiJing_memo.asp?PublishTime=2013-6-1&BranchCode=220&BranchDec=天津'>1</a></td><td align="center" width="3%">0</td><td align="center" width="3%">0</td><td align="center" width="3%">0</td><td align="center" width="3%">0</td><td align="center" width="3%">0</td><td align="center" width="3%">0</td><td align="center" width="3%">0</td><td align="center" width="3%">0</td><td align="center" width="3%">0</td><td align="center" width="3%">0</td><td align="center" width="3%">0</td><td align="center" width="3%">0</td><td align="center" width="3%">0</td><td align="center" width="3%">0</td><td align="center" width="3%">0</td><td align="center" width="3%">0</td><td align="center" width="3%"></td><td align="center" width="3%"></td><td align="center" width="3%"></td><td align="center" width="3%"></td><td align="center" width="3%"></td><td align="center" width="3%"></td><td align="center" width="3%"></td><td align="center" width="3%"></td><td align="center" width="3%"></td><td align="center" width="3%"></td><td align="center" width="3%"></td><td align="center" width="3%"></td><td align="center" width="3%"></td>
</tr>
 
</TABLE>
 
</BODY>
</HTML>

解决方案 »

  1.   

    要进行进一步处理的话,首先缩小正则表达式使用的范围。第一次正则要先匹配出要操作的表格。接下来要获取表格的两个行。匹配第二行单元格中不为空的单元格groupcount,然后操作表格的第一行的groupcount+1的单元格,获取单元格的文本内容
      

  2.   

    为什么只能用正则,用dom不是一样能处理吗
      

  3.   


    我是把Internet上的html文档读到String里,不是在html里直接处理,这个能用dom处理吗?
    而且我是改别人的程序,用dom重写工作量也大。
      

  4.   


    我试了下groupcount,他是先匹配整个字符串,然后匹配括号内的。但是这里我需要匹配第二行里为空的列,然后找到这列上面第一行中的日期,用groupcount不合适吧?
      

  5.   

    有高手吗?看看我写的正则表达式
    String regex = "(?s)<tr bgcolor=\"#eeeeff\"(?:.(?!<tr))*?(?:\\s*<td.*?>.*</td>\\s*)*(?:\\s*<td.*?>(.*?)</td>\\s*).*?</tr>(?s)<tr bgcolor=\"#ffffee\"(?:.(?!<tr))*?(?:\\s*<td.*?>0</td>\\s*)*(?:\\s*<td.*?>(.*?)</td>\\s*).*?</tr>";怎么执行到matcher.find()时,就不动了,调试也没反应?