从html中删除特定链接,但使用正则表达式保留锚文本

时间:2015-01-08 12:16:44

标签: html regex vb.net

我尝试使用reqular表达式从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>

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

2 个答案:

答案 0 :(得分:1)

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

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

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

答案 1 :(得分:0)

试试这个

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

OR

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