过客帮帮我,正则去除不包含特定字符串的A标签~

wszhoho 2009-10-10 03:01:43
<a href=abc.com>abc</a>啊啊啊<a href=bcd.com>abc</a>啊啊啊<a href="abc.com" class="t1">abc</a>啊啊啊<a href=def.com>abc</a>啊啊啊<a href=efg.com>abc</a>

我想要的结果是把链接href中不包含abc的超链接过滤掉:
<a href=abc.com>abc</a>啊啊啊abc啊啊啊<a href="abc.com" class="t1">abc</a>啊啊啊abc啊啊啊abc

我是用<a.*?href=[\"']{0,1}((?!abc).)*?>(.*?)</a>替换为$2,发现行不通,盼指教了。
...全文
570 23 打赏 收藏 转发到动态 举报
写回复
用AI写文章
23 条回复
切换为时间正序
请发表友善的回复…
发表回复
blueman75 2010-08-07
  • 打赏
  • 举报
回复
如何去除图片的超链接?
如<a href="http://www.google.com"><img src="http://img.google.com/news/123.gif"></a>
如除超链接后为<img src="http://img.google.com/news/123.gif">
SQL77 2009-10-12
  • 打赏
  • 举报
回复
正则这东西有点难弄
wszhoho 2009-10-12
  • 打赏
  • 举报
回复
谢过,这个,实在是搞不定。
-过客- 2009-10-12
  • 打赏
  • 举报
回复
算了,先用这种方式解决吧,后面我再看看有没有更好的解决方式

Regex reg = new Regex(@"(?is)<a(?:(?!href=).)*href=(['""]?)([^'""\s>]+)\1[^>]*>((?:(?!</?a\b).)*)</a>");
string result = reg.Replace(yourStr, delegate(Match m) { if (m.Groups[2].Value.IndexOf("abc") > -1) return m.Value; return m.Groups[3].Value; });
wackyboy 2009-10-12
  • 打赏
  • 举报
回复


<a href=www.abc.com>abc </a>啊啊啊 <a href=bcd.com>abc </a>啊啊啊 <a href="www.abc.com" class="t1">abc </a>啊啊啊 <a href=def.com>abc </a>啊啊啊 <a href=efg.com>abc </a>
变成
<a href=www.abc.com>abc </a>啊啊啊 啊啊啊 <a href="www.abc.com" class="t1">abc </a>啊啊啊 啊啊啊

是这样吗?
-过客- 2009-10-12
  • 打赏
  • 举报
回复
或者用这个试下吧,其实实现原理跟19楼的差不多,只不过一个是在正则中判断,一个是在委托方法中判断而已
不过测了下,效率上还是19楼的要高点

Regex reg = new Regex(@"(?is)<a(?:(?!href=).)*href=(['""]?)(?:(?!abc|['""\s>]).)+\1(?:\s[^>]*)?>((?:(?!</?a\b).)*)</a>");
string result = reg.Replace(yourStr, "$2");
wszhoho 2009-10-12
  • 打赏
  • 举报
回复
<a href=www.abc.com>abc </a>啊啊啊 <a href=bcd.com>abc </a>啊啊啊 <a href="www.abc.com" class="t1">abc </a>啊啊啊 <a href=def.com>abc </a>啊啊啊 <a href=efg.com>abc </a> 


-过客- 2009-10-10
  • 打赏
  • 举报
回复
看下是否满足需求吧

Regex reg = new Regex(@"(?is)<a(?:(?!href=).)*href=(['""]?)(?!abc|['""\s>])+\1[^>]*>((?:(?!</?a\b).)*)</a>");
string result = reg.Replace(yourStr, "$2");
JGood 2009-10-10
  • 打赏
  • 举报
回复
<a[^>]*?href\s?=\s?(((['"])((?!abc)[^\3])*?\3)|((?!abc)[^>\s'"]))[^>]*?>[\s\S]*?</a>
JGood 2009-10-10
  • 打赏
  • 举报
回复
谢谢楼主的工具

<a[^>]*?href\s?=\s?(((['"])((?!abc)[^\2])*?\2)|((?!abc)[^>\s'"]))[^>]*?>[\s\S]*?</a>

fengjian_428 2009-10-10
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 wszhoho 的回复:]
谢谢四楼,如果第一个a标签换成 <a href=abcd.com>abc  ,就不行了。又或者href加上单引号,也不行,又或者 <a alt="xxx"这样,紧跟alt标签,也不行,很头疼。
[/Quote]
呵呵 我用的工具跟你一样

不过现在在家 没法再试了
SK_Aqi 2009-10-10
  • 打赏
  • 举报
回复
不错,支持工具
十八道胡同 2009-10-10
  • 打赏
  • 举报
回复
工具不错,每次我写正则都是写个console app的
JGood 2009-10-10
  • 打赏
  • 举报
回复
mark
wszhoho 2009-10-10
  • 打赏
  • 举报
回复
借花献佛一下,送上一个方便的正则测试工具,纯当顶贴了。
http://www.brsbox.com/filebox/down/fc/b10dd16e51c2dce51a6dd8fcc9edae02

wszhoho 2009-10-10
  • 打赏
  • 举报
回复
谢谢四楼,如果第一个a标签换成<a href=abcd.com>abc ,就不行了。又或者href加上单引号,也不行,又或者 <a alt="xxx"这样,紧跟alt标签,也不行,很头疼。
屌丝女士111 2009-10-10
  • 打赏
  • 举报
回复
正则的 都很牛
LutzMark 2009-10-10
  • 打赏
  • 举报
回复
貌似4楼的可以
yanglei6979431 2009-10-10
  • 打赏
  • 举报
回复
帮顶LZ 学习
fengjian_428 2009-10-10
  • 打赏
  • 举报
回复

string input = "<a href=abc.com>abc </a>啊啊啊 <a href=bcd.com>abc </a>啊啊啊 <a href=\"abc.com\" class=\"t1\">abc </a>啊啊啊 <a href=def.com>abc </a>啊啊啊 <a href=efg.com>abc </a> ";
MatchCollection mcs = Regex.Matches(input, "<a[\\s]*href=[\"]?[^a\"][^b][^c][^>]+>[^<]+</a>");
Regex rex = new Regex("(?<=<a[\\s]*href=[\"]?[^a\"][^b][^c][^>]+>)[^<]+(?=</a>)");
Regex rexAll = new Regex("<a[\\s]*href=[\"]?[^a\"][^b][^c][^>]+>[^<]+</a>");
for (int i = 0; i < mcs.Count; i++)
{
Match mc = rex.Match(mcs[i].ToString());
input = rexAll.Replace(input, mc.ToString(), 1);
}


带双引号的再单独处理吧
加载更多回复(3)

62,041

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧