代码之家  ›  专栏  ›  技术社区  ›  Alex. S.

什么是正则表达式和C#代码来去除除链接以外的任何html标记?

  •  0
  • Alex. S.  · 技术社区  · 14 年前

    我在SQLServer2005中创建了一个CLR用户定义函数来清理大量数据库表。

    'a' 标签及其应用 'href' 属性)。所以我把问题分为两个阶段。1创建用户定义的sql server函数,以及2。创建一个sql server脚本来更新调用clr函数的所有相关表。

    在javascript这个正则表达式中,显然做了正确的工作:

     <\s*a[^>]\s*href=(.*)>(.*?)<\s*/\s*a>
    

    至少,根据 http://www.pagecolumn.com/tool/regtest.htm

    例如,如果输入是: <a href="http://example.com">some text</a> 如何保存文本 "http://example.com" "some text" 作为C代码输出的一部分,同时剥离任何其他可能的html标记(及其内容)?

    3 回复  |  直到 14 年前
        1
  •  0
  •   Timwi    14 年前

    正则表达式完全错误:

    <\s*a[^>]\s*href=(.*)>(.*?)<\s*/\s*a>
          ↑            ↑
          1.           2.
    
    1. 这导致 <aa... <ab... , <ac... 等来匹配。
    2. <a href='/one'>One</a> <a href='/two'>Two</a>
              ├───────────────────────────┤ ├─┤
                         group 1            grp2
      
        2
  •  0
  •   Lachlan    14 年前

    不像乔丹的那样能防弹,但用火柴代替的例子是:

    var pattern = @"<.*href=""(?<url>.*)"".*>(?<name>.*)</a>";
    var matches = Regex.Matches(input, pattern);
    foreach (Match match in matches)
    {
        var groups = match.Groups;
        Console.WriteLine("{0}, {1}", groups["url"], groups["name"]);
    }
    
        3
  •  0
  •   Alex. S.    14 年前

    最后。我制作了一个单独的.net控制台程序,将HtmlAgilityPack(HAP)和从那里查询SQL Server结合起来。在这个程序中,我确实使用了一个简单的正则表达式来分离片段,使用HAP检索了href和锚文本,并使用它完成了最后的合成,去掉了除文本、数字和一些标点符号以外的任何其他字符。