A页面
<div class="content">
  <ul  id="ul1">
         <li><a  href="B页面网址">a</a></li>
   </ul>
         <div id="bbb"></b>  --  干扰片段    <ul  id="ul2">
         <li><a  href="C页面网址">b</a></li>
   </ul>    
</div>C页面内容
  <div class="PbLk">
             <div class="SbLk" > 
                   <h1 id="title">标题</h1>
                         <div class="SBLKCon" id="artibody">
                                 <p>有用信息</p>
                                 <p>有用信息</p>
                     <style type="text/css">没用的样式</script> --干扰片段还有部分js                                 <p>有用信息</p>
               </div>
  </div>问题如下:
   1:Regex reg = new Regex(@"(?is)(?<=<div[^>]*?class=""content""[^>]*?>(?:(?!</?div).)*)<a[^>]*?href=(['""\s]?)(?<url>[^'""\s]+)\1[^>]*?>(?<title>.*?)</a>"); 这一段正则遇到干扰的片段之后没办法读取到C页面的网址信息 只能读取到B页面的
         2: 我手动写的 获取标题错在何处 
Regex regTitle = new Regex("<h1 id=\"title\">(?<title>.*?)</h1>", RegexOptions.Multiline | RegexOptions.IgnoreCase);
            string title= regTitle.Matches(html)[0].Groups["title"].Value; //html里面获取的页面的所有信息是有值的
         3: 获取C页面中的 有用信息       怎么写正则: 在指定div中查询有效的值   

解决方案 »

  1.   

    string title = Regex.Match(tempStr, @"(?i)<h1[^>]+title[^>]+>([^<]+)</h1>").Groups[1].Value;//标题
      

  2.   

    问题1:正则改成如下
    string pattern = @"(?is)(?<=<div[^>]*?class=""content""[^>]*?>(?:(?!</?div>).)*)<a[^>]*?href=(['""\s]?)(?<url>[^'""\s]+)\1[^>]*?>(?<title>.*?)</a>";
      

  3.   

    问题三: string tempStr = File.ReadAllText(@"C:\Documents and Settings\Administrator\桌面\Test.txt", Encoding.GetEncoding("GB2312"));
                string pattern = @"(?is)(?<=<div[^>]*?id=""artibody""[^>]*?>(?:(?!</?div>).)*)<p>([\s\S]*?)</p>"; 
                foreach (Match m in Regex.Matches(tempStr, pattern))
                {
                    //循环输出
                    string text = string.Format("{0}", m.Groups[1].Value);
                    //有用信息
                }
      

  4.   

    牛人可以详细的解释一下 这么莫名的正则吗??<=为什么要反向肯定预查呢?[^>]这个表示什么意思呢 
    ?:匹配的贪婪模式是怎么回事啊    为什么抓取有的站点是乱码 有的站点不是乱码啊
    谢谢你了  
      

  5.   

    Regex reg = new Regex(@"(?is)(?<=<div[^>]*?class=""content""[^>]*?>(?:(?!</?div).)*)<a[^>]*?href=(['""\s]?)(?<url>[^'""\s]+)\1[^>]*?>(?<title>.*?)</a>");
    大哥 这两段正则有区别吗?
      

  6.   

    多了一个符号,结果就完全不同,控制点不同
    string pattern = @"(?is)(?<=<div[^>]*?class=""content""[^>]*?>(?:(?!</?div>).)*)<a[^>]*?href=(['""\s]?)(?<url>[^'""\s]+)\1[^>]*?>(?<title>.*?)</a>";