string a=@"<a href=""thread-582174-1-1.html""><a href=""thread-582175-1-1.html"" title=""新窗口打开"" target=""_blank""><a href=""thread-582174-2-1.html"">2</a> <a href=""thread-582174-3-1.html"">3</a>";        //原正则:<\w*a \w*href\w*=\w*"(thread[^"]*-\d+-\d+\.html)"+w*>
        string pattern = @"<\w*a \w*href\w*=\w*'""(thread[^'""]*-\d+-\d+\.html)'""+w*>";//写错在哪里?
        MatchCollection m = Regex.Matches(a,pattern);
        for (int i = 0; i < m.Count; i++)
        {
            string stUrl = m[i].Value.ToString();
            
            Response.Write(stUrl);
        }以上正则在测试器里能正常,可放到代码中了之后,没有输出,正则写错在哪?

解决方案 »

  1.   

    你的正则表达式有问题string a=@"<a href=""thread-582174-1-1.html""><a href=""thread-582175-1-1.html"" title=""新窗口打开"" target=""_blank""><a href=""thread-582174-2-1.html"">2</a> <a href=""thread-582174-3-1.html"">3</a>";
    string pattern = @"<\w*a\s*\w*href\w*=\w*""(thread[^""]*-\d+-\d+\.html)""+w*>";//写错在哪里?
    MatchCollection m = Regex.Matches(a,pattern);
    for (int i = 0; i < m.Count; i++)
    {
        string stUrl = m[i].Value.ToString();
        Response.Write(stUrl);
    }自己对照一下看看吧.
      

  2.   

    不要写那么复杂
    String pattern=@"<a.*?href=""(.*?)"".*?>";测试通过
      

  3.   


    string a=@"<a href=""thread-582174-1-1.html""><a href=""thread-582175-1-1.html"" title=""新窗口打开"" target=""_blank""><a href=""thread-582174-2-1.html"">2</a> <a href=""thread-582174-3-1.html"">3</a>";MatchCollection mc = Regex.Matches(a,@"(?is)(?<=<a\s+.*?href\s*=\s*"")thread[^""]+");
    foreach(Match m in mc)
    {
        Response.Write(m.Value);
    }// 这里取到4个连接 但是只是包含 thread 的连接 
    // 如果只是取到连接而不需要考虑连接中是否含有 thread, 可以用这个 @"(?is)(?<=<a\s+.*?href\s*=\s*"")[^""]+" , 欧了