高手请进,这个正则表达式搞的我一夜没睡!
事先说下哦:我只想找到为什么我的这个会出错,这个是最主要的。。。改良写法嘛也可以给,但是帮我找到我错的原因是最重要的哦。。
因为我写的正则用 Code Architects Regex Tester是可以匹配出结果啊,这个正则工具也是用.Net写的,为啥在这个程序里就不行了?难道不是正则的问题?我看了一晚上实在看不到那里的问题.
MatchCollection mc = Regex.Matches(str_html, @ " <table\s+border[^> ]+> \s* <tr> \s* <td\s+height[^> ]+> (? <date> [^&]+) (? <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日 星期三 <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>
<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下都可以得到正确结果,而且正则的写法也是比较规范的
你的源字符串是如何得到的,问题可能出在这里,如果问题还没解决,贴一下其它的相关代码吧