日期:2014-05-19  浏览次数:20820 次

高手请进,这个正则表达式搞的我一夜没睡!
事先说下哦:我只想找到为什么我的这个会出错,这个是最主要的。。。改良写法嘛也可以给,但是帮我找到我错的原因是最重要的哦。。

因为我写的正则用   Code   Architects   Regex   Tester是可以匹配出结果啊,这个正则工具也是用.Net写的,为啥在这个程序里就不行了?难道不是正则的问题?我看了一晚上实在看不到那里的问题.

MatchCollection   mc   =   Regex.Matches(str_html,   @ " <table\s+border[^> ]+> \s* <tr> \s* <td\s+height[^> ]+> (? <date> [^&]+)&nbsp;&nbsp;(? <week> [^ <]+) <br> \s* <SCRIPT\s+language[^> ]+> \s*[^ <]+ </SCRIPT> [^ <]+ <a[^> ]+> \s* <font[^> ]+> [^ <]+ </font> \s* </a> \s*\|\s* <a[^> ]+> \s* <font[^> ]+> [^ <]+ </font> \s* </a> \s* </td> \s* </tr> \s* </table> \s* <table[^> ]+> \s* <tr[^> ]+> \s* <td[^> ]+> \s* <a[^> ]+> \s* <img[^> ]+> \s* </a> \s* </td> \s* <td\s+class=blu01> \s*(? <weather> [\u4e00-\u9fa5]+)\s* <br> \s*(? <temperature> [^ <]+) <br> \s*(? <wind> [^ <]+) <br> ",   RegexOptions.IgnoreCase);
 
要匹配的字符串如下:
<table   border=0   cellpadding=0   cellspacing=0   width=186   bgcolor=#ffffff   class=gra01>
<tr>  
<td   height=50   style=padding-left:6px> 2007年6月6日&nbsp;&nbsp;星期三 <br>
<SCRIPT   language=javascript>
      var   today   =   new   Date();
      var   thedayaftertomorrow=   new   Date(today.getTime()   +   1000*60*60*24*2);
      var   str   =   GetLunarDateString(thedayaftertomorrow);
      document.writeln(str);
</SCRIPT> &nbsp;&nbsp;&nbsp;
<a   href=http://sms.sohu.com/book/book.php?id=26   target=_blank>
<font   color=#CF6C06> 黄历 </font> </a>
| <a   href=http://sms.sohu.com/book/book.php?id=21   target=_blank>
<font   color=#CF6C06> 星座 </font> </a>
</td>   </tr>
</table>
<table   border=0   cellpadding=0   cellspacing=0   width=186   bgcolor=#ffffff>
<tr   style=padding-bottom:8px>  
<td   width=100   align=center> <a   href= "./city.php?city=上海 "   target=_blank> <img   src= "http://img.sms.sohu.com/i/weather/images/yzdy_01.gif "   width=83   height=65   alt=阴转多云   border=0   class=img2> </a> </td>
<td   class=blu01> 阴转多云 <br>
27℃~21℃ <br>
东风3-4级
<br>

------解决方案--------------------
您的正则表达式没问题,这个模式与整个字符串有一个匹配,匹配中有6个组,各组的值是:
[0] 原始串
[1] 2007年6月6日
[2] 星期三
[3] 阴转多云
[4] 27℃~21℃
[5] 东风3-4级

难为你写这么长的模式,我建议您多写几个模式,每个模式取一个值。


------解决方案--------------------
我测试了,无论在正则工具中,还是在vs.net下都可以得到正确结果,而且正则的写法也是比较规范的

你的源字符串是如何得到的,问题可能出在这里,如果问题还没解决,贴一下其它的相关代码吧