读书人

老调重弹求一正则!该如何解决

发布时间: 2012-01-14 20:02:35 作者: rapoo

老调重弹,求一正则!

HTML code
                        <ul class="vv41Table">                         <li class='vv4TableDIV1' >                        <span class="vv41A"><a href="../ddddd/sss" target="_blank">********</a></span></li>                         <li class='vv4TableDIV1' >                        <span class="vv41A"><a href="../ddddd/sss" target="_blank">********</a></span></li>                         <li class='vv4TableDIV1' >                        <span class="vv41A"><a href="../ddddd/sss" target="_blank">********</a></span></li>                         <li class='vv4TableDIV1' >                        <span class="vv41A"><a href="../ddddd/sss" target="_blank">********</a></span></li>                        </ul>

页面里有这么一个列表,匹配列表里面的a标签!ul外面也会有a标签,但是不匹配,只匹配<ul class="vv41Table">下的a标签





[解决办法]
C# code
        string s = File.ReadAllText(Server.MapPath("~/test.txt"));        MatchCollection matches=Regex.Matches(s, @"(?is)(?<=<ul[^>]+class=""vv41Table""[^>]*>.*?)<a[^>]+>.*?</a>(?=.*?</ul>)");        foreach (Match match in matches)            Response.Write(Server.HtmlEncode(match.Value) + "<br/>");
[解决办法]
<ul class="vv41Table">
<li class='vv4TableDIV1' >
<span class="vv41A"><a href="../ddddd/sss" target="_blank">********</a></span></li>
<li class='vv4TableDIV1' >
<span class="vv41A"><a href="../ddddd/sss" target="_blank">********</a></span></li>
<li class='vv4TableDIV1' >
<span class="vv41A"><a href="../ddddd/sss" target="_blank">********</a></span></li>
<li class='vv4TableDIV1' >
<span class="vv41A"><a href="../ddddd/sss" target="_blank">********</a></span></li>
</ul>
<ul class="vv41Table1">
<li class='vv4TableDIV1' >
<span class="vv41A"><a href="../ddddd/sss" target="_blank">********</a></span></li>
<li class='vv4TableDIV1' >
<span class="vv41A"><a href="../ddddd/sss" target="_blank">********</a></span></li>
<li class='vv4TableDIV1' >
<span class="vv41A"><a href="../ddddd/sss" target="_blank">********</a></span></li>
<li class='vv4TableDIV1' >
<span class="vv41A"><a href="../ddddd/sss" target="_blank">********</a></span></li>
</ul>
------------------------------------
这样结果不正确
------解决方案--------------------


嗯,可以这样:

C# code
        string s = File.ReadAllText(Server.MapPath("~/test.txt"));        MatchCollection uls = Regex.Matches(s, @"(?is)<ul[^>]+class=""vv41Table""[^>]*>.*?</ul>");        List<string> results = new List<string>();        foreach (Match ul in uls)        {            MatchCollection anchors = Regex.Matches(ul.Value, @"(?is)<a[^>]+>.*?</a>");            foreach (Match anchor in anchors)                results.Add(anchor.Value);        }        foreach (string result in results)            Response.Write(Server.HtmlEncode(result) + "<br/>");
[解决办法]
也可以用Dom方式获取,要简单得多:
C# code
        HtmlDocument htmlDoc = new HtmlDocument();        htmlDoc.Load(Server.MapPath("~/test.txt"));        HtmlNodeCollection anchors=htmlDoc.DocumentNode.SelectNodes(@"//ul[@class='vv41Table']//a");        foreach (HtmlNode anchor in anchors)            Response.Write(Server.HtmlEncode(anchor.OuterHtml) + "<br/>");
[解决办法]
高手啊 学习
[解决办法]
我也是来学习的
[解决办法]
C# code
            string str = File.ReadAllText(@"E:\1.txt");            Regex reg = new Regex(@"(?is)(?<=<ul[^>]+?class=""vv41Table""[^>]*?>(?:(?!</?ul).)*)<a[^>]+>.*?</a>");            foreach (Match m in reg.Matches(str))                Console.WriteLine(m.Value);
[解决办法]
C# code
void Main(){                      string str = @"<ul class=""vv41Table"">  <li class='vv4TableDIV1' >  <span class=""vv41A""><a href=""../ddddd/sss"" target=""_blank"">********</a></span></li>  <li class='vv4TableDIV1' >  <span class=""vv41A""><a href=""../ddddd/sss"" target=""_blank"">********</a></span></li>  <li class='vv4TableDIV1' >  <span class=""vv41A""><a href=""../ddddd/sss"" target=""_blank"">********</a></span></li>  <li class='vv4TableDIV1' >  <span class=""vv41A""><a href=""../ddddd/sss"" target=""_blank"">********</a></span></li>  </ul> <ul class=""vv41Table1"">  <li class='vv4TableDIV1' >  <span class=""vv41A""><a href=""../ddddd/sss"" target=""_blank"">********</a></span></li>  <li class='vv4TableDIV1' >  <span class=""vv41A""><a href=""../ddddd/sss"" target=""_blank"">********</a></span></li>  <li class='vv4TableDIV1' >  <span class=""vv41A""><a href=""../ddddd/sss"" target=""_blank"">********</a></span></li>  <li class='vv4TableDIV1' >  <span class=""vv41A""><a href=""../ddddd/sss"" target=""_blank"">********</a></span></li>  </ul>";      foreach(Match m in Regex.Matches(str,@"(?is)<ul class=(['""\s]?)vv41Table\1>.*?((<a[^>]*?>[^<>]+</a>).*?)+</ul>"))      {         foreach(Capture c in m.Groups[3].Captures)         {            Console.WriteLine(c.Value);         }      }            /*    <a href="../ddddd/sss" target="_blank">********</a>    <a href="../ddddd/sss" target="_blank">********</a>    <a href="../ddddd/sss" target="_blank">********</a>    <a href="../ddddd/sss" target="_blank">********</a>      */} 


[解决办法]
我也是学习来的
没看懂~~

读书人网 >asp.net

热点推荐