href="/song/12417295" class="" data-songdata='{ "id": "" }' title="花开花谢花满天">花开花谢花满天</a>
 <div class="extra-info">
 <span>电视剧《暗线》插曲</span>
 </div>
 </span>
 <span class="singer" style="width: 120px;" >
 <span class="author_list">
 <a title="黄馨可" hidefocus="true" href="/data/artist/redirect?id=12418880">
 黄馨可 </a>
 </span>
 </span>
 <span class="album-title" style="width: 130px;" >
 </span>
 <span class="fun-icon">
 <span class="music-icon-hook" data-musicicon = '{&quot;id&quot;:&quot;12417295&quot;,&quot;type&quot;:&quot;song&quot;,&quot;iconStr&quot;:&quot; play add download&quot;,&quot;moduleName&quot;:&quot;songListIcon&quot;}'>
 <a class="list-micon icon-play" data-action="play" title="播放"
 href="#"><i></i></a>
 <i class="module-line music-icon-line"></i>
 <a class="list-micon icon-add" data-action="add" title="添加"
 href="#"><i></i></a>
 <i class="module-line music-icon-line"></i>
 <a class="list-micon icon-download" data-action="download" title="下载"
 href="#"><i></i></a>
 </span>
 </span>
 </div>
 </li>
 <li data-songitem = '{&quot;songItem&quot;:{&quot;sid&quot;:5553513}}' class="bb-dotimg clearfix song-item-hook " >
 <div class="song-item clearfix">
 <span class="checkbox-item">
 <input type="checkbox" class="checkbox-item-hook" />
 </span>
 <span class="index-num index-hook" style="width: 33px;" >
 11
 </span>
 <span class="song-info " ></span>
 <span class="song-title" style="width: 170px;" >
 <a href="/song/5553513" class="" data-songdata='{ "id": "" }' title="桂花酿">桂花酿</a>
 <div class="extra-info">
 </div>
 </span>
 <span class="singer" style="width: 120px;" >
 <span class="author_list">
 <a title="林一峰" hidefocus="true" href="/data/artist/redirect?id=390">
 林一峰 </a>
 <span class="artist-line">/</span>
 <a title="黄馨" hidefocus="true" href="/data/artist/redirect?id=60758">
 黄馨 </a>
 </span>
 </span>
 <span class="album-title" style="width: 130px;" >
 <a href="/album/5721712" title="花诀">《花诀》</a>
 </span>
用这个正则匹配 "[\s\S]+?title\="黄馨" 竟是按照贪婪匹配的,各位帮忙解惑啊正则表达式

解决方案 »

  1.   

    http://blog.csdn.net/zyloveyrf/article/details/6937797
      

  2.   

    [\s\S]+? 是非贪婪模式,
    给你举个例子吧
    源字符串:aa<div>test1</div>bb<div>test2</div>cc正则表达式一:<div>.*</div>匹配结果一:<div>test1</div>bb<div>test2</div>正则表达式二:<div>.*?</div>匹配结果二:<div>test1</div>(这里指的是一次匹配结果,所以没包括<div>test2</div>)
      

  3.   

    http://blog.csdn.net/lxcnn/article/details/4756030
      

  4.   

    第一次匹配到的是
    <a title="黄馨" hidefocus="true" href="/data/artist/redirect?id=60758">
     黄馨 </a
      

  5.   

    是不是从头匹配到
     林一峰 </a>
     <span class="artist-line">/</span>
     <a title="黄馨" 
    这里了?
      

  6.   

    +、*   等后面加?表示非贪婪模式。
    楼主的这个表达式  [\s\S]+?title\="黄馨"     意思是 从字符开始尽可能少的匹配直到遇到title\="黄馨" 表示匹配成功。所以从字符开始到title\="黄馨"前面的字符都会被包括进来。
      

  7.   

    正则是这个    "[\s\S]+?title\="黄馨" 前面带"的
      

  8.   

    <a title="黄馨"之前的都会匹配到,因为你用的[\s\S]+?
       string str = File.ReadAllText(@"C:\1.txt", Encoding.GetEncoding("GB2312"));
              
                MatchCollection mc = Regex.Matches(str,@"(?i)[\s\S]+?title\=""黄馨""");
                foreach (Match m in mc)
                {
                    Console.WriteLine(string.Format("第一次匹配:{0}", m.Groups[0].Value));
                }
      

  9.   

     当然你用 Console.WriteLine(string.Format("第一次匹配:{0}", m.Value));也是一样的,
    他会一直匹配到<a title="黄馨"
      

  10.   

    只想匹配这么多   ">/</span>
     <a title="黄馨"
      

  11.   

    (?i)<a\b[^>]+?title\="黄馨"  string str = File.ReadAllText(@"C:\1.txt", Encoding.GetEncoding("GB2312"));
              
                MatchCollection mc = Regex.Matches(str,@"(?i)<a\b[^>]+?title\=""黄馨""");
                foreach (Match m in mc)
                {
                    Console.WriteLine( m.Value));
                }
      

  12.   

    匹配结果为:<a title="黄馨"
      

  13.   

    string pattern=@"""[^""]+?title=""黄馨""";
      

  14.   

    我的最终问题;
    代码是 http://music.baidu.com/search?key=%E9%BB%84%E9%A6%A8 的源码.
    我想匹配的是 1-9,11,12,16 这里面有黄馨的行的代码.我的正则如下href="(?<sidstr>.+?)".+?title\="(?<sname>[^"]+?)"[\s\S]+?title\="黄馨"[\s\S]+?130px;"\s+>(?<albumstr>[\s\S]+?)</span>请问怎么改我的正则?
      

  15.   

    .
    *
    +
    等后面加?
    就是非贪恋=======================================================
    .NET快速开发整合框架(RDIFramework.NET),基于.NET的快速开发、整合框架,给用户和开发者最佳的.Net框架部署方案。
    平台博客:[CNBLOGS]http://www.cnblogs.com/huyong 
         [CSDN]http://blog.csdn.net/chinahuyong
    交流QQ:406590790 (请注明:CSDN)
    平台微博:http://t.qq.com/yonghu86
    邮件交流:[email protected]
      

  16.   

    打开 http://music.baidu.com/search?key=%E9%BB%84%E9%A6%A8页面里的 行数,
    明白了么?
      

  17.   


      string str = File.ReadAllText(@"C:\1.txt", Encoding.GetEncoding("GB2312"));            MatchCollection mc = Regex.Matches(str, @"(?is)<span\s*class=""song-title""[^>]*?>\s*<a[^>]*?>(?<title>(.*?))</a>.*?<a\s*title\=""黄馨""\s*[^>]*?>.*?<span\s*class=""album-title""[^>]*?>\s*<a\b[^>]*?>(?<albumstr>.*?)</a>\s*</span>");
                foreach (Match m in mc)
                {
                    Console.WriteLine(string.Format("title:{0},albumstr:{1}", m.Groups[1].Value, m.Groups[2].Value));
                }
      

  18.   

    Chinajiyong  老大你的正则 写的不错,只不过,一共应该有12个结果你的只有10个.
      

  19.   

    i 表示忽略大小写,s看做单行模式
     string str = File.ReadAllText(@"C:\1.txt", Encoding.GetEncoding("GB2312"));            MatchCollection mc = Regex.Matches(str, @"(?is)<span\s*class=""song-title""[^>]*?>\s*<a[^>]*?>(?<title>(.*?))</a>.*?<a\s*title=""黄馨""\s*[^>]*?>\s*<em>黄馨</em>\s*</a>.*?<span\s*class=""album-title""[^>]*?>\s*(<a\s*[^>]*?>(?<albumstr>.*?)</a>)?\s*</span>");
                foreach (Match m in mc)
                {
                    Console.WriteLine(string.Format("title:{0},albumstr:{1}", m.Groups[1].Value, m.Groups[2].Value));
                }
      

  20.   

    正则改成这样就有12条数据了,只不过 你的结果和我的一样啊,还是有问题 ,[花开花谢花满天] 这条是有问题的,应该匹配[桂花酿](?is)<span\s*class="song-title"[^>]*?>\s*<a[^>]*?>(?<title>(.*?))</a>.*?<a\s*title\="黄馨"\s*[^>]*?>.*?<span\s*class="album-title"[^>]*?>(?<albumstr>[\s\S]+?)</span>