读书人

正则表达式有关问题 html取值

发布时间: 2012-03-18 13:55:39 作者: rapoo

正则表达式问题 html取值

HTML code
<div class="fans_top" id="weibo_head"><a href="http://baidu.com/" target="_blank">评论(0)</a><div>dddd</div></div><div class="ddd" id="ccc"><a href="http://baidu.com/" target="_blank">评论(20)</a><a href="http://baidu.com/" target="_blank">评论(150)</a></div>



想得到的结果为:class为fans_top 和id为weibo_head里面包含的html值;
正则的写法为:(?<=<div[^>]+class="fans_top"[^>]+id="weibo_head"[^>]*>)[\s\S]*?(?=</div>)

但是在此DIv中不包含子div时,值是取的正确的,现在就是里面如果在出现一个div的话,结束的地方就产生了错误!




[解决办法]

C# code
                string htmsStr = @"<div class=""fans_top"" id=""weibo_head""><a href=""http://baidu.com/"" target=""_blank"">评论(0)</a><div>dddd</div></div><div class=""ddd"" id=""ccc""><a href=""http://baidu.com/"" target=""_blank"">评论(20)</a><a href=""http://baidu.com/"" target=""_blank"">评论(150)</a></div>";                               Regex re = new Regex("(?is)(?<=<div\\s*class=\"fans_top\"\\s*id=\"weibo_head\">).*?(?=</div>)", RegexOptions.None);                Match mt = re.Match(htmsStr);                                 Console.WriteLine(mt.Value);                Console.ReadLine();
[解决办法]
C# code
string tempStr = File.ReadAllText(@"C:\Documents and Settings\Administrator\桌面\Test.txt", Encoding.GetEncoding("GB2312"));                string pattern = @"(?i)(?<=<div[^>]*?class=['""]?fans_top['""]?[^>]*?id=['""]?weibo_head['""]?[^>]*?>)(?><div[^>]*>(?<Open>)|</div>(?<-Open>)|(?:(?!</?div\b)[\s\S])*)*(?=</div>)";                string temp_result = Regex.Match(tempStr,pattern).Value;                //<a href=\"http://baidu.com/\" target=\"_blank\">评论(0)</a>\r\n<div>dddd</div> 

读书人网 >asp.net

热点推荐