【问题标题】:Remove specific link from html but leave anchor text using reqular expressions从 html 中删除特定链接,但使用正则表达式保留锚文本
【发布时间】:2015-01-08 12:16:43
【问题描述】:

我尝试使用正则表达式从 html 字符串中删除特定链接。

我有一个这样的 html 字符串:

<a href="http://linkA.com/fdfdfdf">use this</a> to make this <a href="http://linkB.com/fdsfds">happen</a>

最后我希望它看起来像这样:

<a href="http://linkA.com/fdfdfdf">use this</a> to make this happen

我尝试了很多模式。起初我通过这个删除了所有href:

</?a(|\s+[^>]+)>

然后我尝试了很多正则表达式:

<a\s+(?:[^>]*?\s+)?href="linkB.com([^"]*)
/<a[^>]*href="http\:\/\/linkB.com([^"]*)"[^>]*>.*<\/a>/
<a href="[^"]*?linkB*?">.*?</a>

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

(?=.*href=\"([^\"]*linkB[^"]*)")<a [^>]+>
<a[^>]*puustelli[^>]*>[^<]*<\/a>

他们都没有做我需要做的事情。魔术需要通过仅查找 url 的域部分来发生。我希望所有指向 linkB 的链接都消失,但保留锚文本。

【问题讨论】:

标签: html regex vb.net


【解决方案1】:

此正则表达式将查找带有包含“linkB.com”的 href 的锚标记,并保存在捕获组 1 中的锚标记之间找到的文本。

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

请注意,此正则表达式非常严格。它不允许在锚标签中有额外的属性,也不允许标签出现在锚标签之间。它可以变得更灵活,但很快就会变得丑陋。如果您需要比此正则表达式提供的更多灵活性,我认为最好使用 HTML 解析器,例如 HTML Agility Pack。

【讨论】:

  • 最后我用了这个:]+>([^
  • 对它进行更多说明,使其具有更大的灵活性:]+>([^
  • @Timo77 - 请注意,您的最后一个正则表达式捕获的不仅仅是 LINKB 锚点。如果您只想在 href 之后允许其他属性,则可以使用此正则表达式: ]+)?>([^
【解决方案2】:

试试这个

(<\sa\shref=[^<]+<\sa)href="http:\/\/linkB\.com\/[^>]+(>happen<\/a>)

(.*<\sa\s)href="http:\/\/linkB\.com\/[^>]+(>happen<\/a>)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-03-21
    • 2013-06-15
    • 2018-09-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多