各位大大,我用表达式<a(.+?)href=[\"\']?(.+?)[\"\'\\s>]+(.+?)[>](.+?)<\\/a>提取网页中的所有链接,问什么匹配不对啊!把<a></a>后面的内容也放进来了,就像这样“href=tx101002.htm target=_blank>第二章</a></td><td>&nbsp;</td><td>&nbsp;</td>...(直到文件尾),到底是什么问题啊?希望各位大大帮忙!

解决方案 »

  1.   

    示例:扫描 HREF(From MSDN)以下示例搜索输入字符串并输出所有 href=“...”值和它们在字符串中的位置。它执行此操作的方式为,首先构造编译的 Regex 对象,然后使用 Match 对象来循环访问字符串中的所有匹配。在下面的代码示例中,元字符 \s 匹配任何空白字符,\S 匹配任何非空白字符。[Visual Basic]
       Sub DumpHrefs(inputString As String)
       Dim r As Regex
          Dim m As Match
        
          r = New Regex("href\s*=\s*(?:""(?<1>[^""]*)""|(?<1>\S+))", _
             RegexOptions.IgnoreCase Or RegexOptions.Compiled)
        
          m = r.Match(inputString)
          While m.Success
             Console.WriteLine("Found href " & m.Groups(1).Value _
                & " at " & m.Groups(1).Index.ToString())
             m = m.NextMatch()
          End While
       End Sub
    [C#]
       void DumpHrefs(String inputString) 
       {
          Regex r;
          Match m;      r = new Regex("href\\s*=\\s*(?:\"(?<1>[^\"]*)\"|(?<1>\\S+))",
             RegexOptions.IgnoreCase|RegexOptions.Compiled);
          for (m = r.Match(inputString); m.Success; m = m.NextMatch()) 
          {
             Console.WriteLine("Found href " + m.Groups[1] + " at " 
                + m.Groups[1].Index);
          }
       }
      

  2.   

    (h|H)(r|R)(e|E)(f|F)*=*('|")?(\w|\\|\/|\.)+('|"|*|>)?
      

  3.   

    \w 好像不包含 “?”, 有些ASP link 有 "?" etc.