【问题标题】:asp.net regex to find anchor tags and replace their urlasp.net 正则表达式查找锚标签并替换其 url
【发布时间】:2010-05-13 21:29:08
【问题描述】:

我正在尝试查找所有锚标记并将 href 值附加一个变量。 例如

<a href="/page.aspx">link</a> will become <a href="/page.aspx?id=2">
<A hRef='http://www.google.com'><img src='pic.jpg'></a> will become <A hRef='http://www.google.com?id=2'><img src='pic.jpg'></a>

我可以使用正则表达式匹配所有锚标记和 href 值,然后我使用 string.replace 手动替换值,但是我认为它不是执行此操作的有效方法。 有没有解决方案,我可以使用类似 regex.replace(html,newurlvalue)

【问题讨论】:

    标签: .net asp.net regex


    【解决方案1】:

    是的,你可以。标准警告适用——正则表达式的功能不足以可靠地解析 html。换句话说,在最直接和受控的示例中,它实际上可能对您有用,但在很多情况下它会失败。

    但是,如果您已经编写了正则表达式,请将其与 HTML 一起粘贴到 Regex Hero,单击“替换”选项卡并输入替换字符串。

    一旦您确认它工作正常,点击工具 > 生成 .NET 代码,您就会得到答案。

    更新:所以这是一个使用组的不完美示例:

    string strRegex = @"(?<=href="")(?<url>[^""]+)(?="")";
    RegexOptions myRegexOptions = RegexOptions.IgnoreCase;
    Regex myRegex = new Regex(strRegex, myRegexOptions);
    string strTargetString = @"<a href=""/page.aspx"">link</a> will become <a href=""/page.aspx?id=2"">" + (char)10 + "<A hRef='http://www.google.com'><img src='pic.jpg'></a> will become <A hRef='http://www.google.com?id=2'><img src='pic.jpg'></a>";
    string strReplace = "http://mysite.com${url}";
    
    return myRegex.Replace(strTargetString, strReplace);
    

    http://regexhero.net/tester/?id=e993fbf1-acb7-4f59-af87-94253a6e8221

    (?&lt;url&gt;[^"]+) 部分是一个命名组,可以在替换字符串中引用为${url}

    更新 #2:

    所以要只匹配不带问号的 URL,您可以这样做:

    (?<=href=")(?![^"]*\?)(?<url>[^"]+)(?=")
    

    (?![^"]*\?) 部分是负前瞻,可以解决问题。

    【讨论】:

    • 真棒..这正是我正在寻找的...谢谢...但是一个小问题...我正在尝试附加一个 querysring 值...我如何检查是否匹配是否已经包含查询字符串?例如:/script.aspx 变成 /script.aspx?id=2 和 /script.aspx?a=2 变成 /script.aspx?a=2&id=2
    • 当然,请参阅我的更新答案。负前瞻可以解决问题。但是,您实际上可能需要编写两个正则表达式来处理 ?&amp; 情况。
    • 对不起,这很尴尬。我的正则表达式技能真的很糟糕。该模式与单引号括起来的 url 不匹配,因此这将不匹配 我希望它同时匹配单引号、双引号甚至不带引号的...所以 google.com>应该也不错。
    • @ace - 好吧,当您拥有格式良好的 XHTML 时,这是可行的,但是在没有任何引号的情况下匹配 href 是正则表达式方法真正开始崩溃的时候。在这种情况下,我强烈推荐 HTML Agility Pack。
    • 顺便说一句,正则表达式被设计用来解析正则语言,就复杂性而言,它比 HTML 低了几个级别。我认为 HTML 将被视为 Chomsky 层次结构中列出的上下文相关语言,这就是为什么最好使用专门的 HTML 解析器:en.wikipedia.org/wiki/Chomsky_hierarchy
    【解决方案2】:

    如果您使用正则表达式解析 HTML,标准建议是改用 HMTL Agility Pack

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-11-29
      • 2016-03-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多