Asp.net匹配正则表达式问题

zwg3857471 2009-05-19 08:52:29
(?<url>(?<=<a href ?= ?('|\")?)[^'\">]+?(?='|\"|>)).*(?<Text>(?<=>)[^<]+?(?=</a>))
请问这段正则是什么意思,有人能帮忙分析一下吗?还有就是一般的URL都能匹配了,就出一点小BUG如:
"<a href='http://www.kook.com/women/index_4.html'>4</a>"+
"<a href='http://www.kook.com/women/index_5.html'>5</a>
匹配出来的结果是'http://www.kook.com/women/index_4.html 5 这是怎么回事
...全文
67 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
wackyboy 2009-05-19
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 zwg3857471 的回复:]
1楼的可以用,能否帮忙解一下,这是我从网上拷过来的,对正则还是不太懂
[/Quote]
因为 .* 是贪婪的,会尽可能的匹配,而且 . 会在非单行模式下匹配出换行符之外的任意字符,在单行模式下匹配任意字符
" <a href='http://www.kook.com/women/index_4.html'>4 </a>"+
" <a href='http://www.kook.com/women/index_5.html'>5 </a>"
当你的字符串匹配到 "index_4.html'" 时,直到最后一个字符都会被 . 匹配,这样的话就会匹配到 "index_5.html'>5 </a>"
因为正则要求还要匹配 >< 之间的字符,所有正则引擎会从最后一个匹配的字符开始回溯,一直回溯到 "index_5.html'>"
这样在匹配就将 5 匹配出来了
如果你的字符串是
" <a href='http://www.kook.com/women/index_4.html'>4 </a>"+
" <a href='http://www.kook.com/women/index_5.html'>5 </a>"+
" <a href='http://www.kook.com/women/index_6.html'>6 </a>"
那么取到的text将会是6
当 .*? 的时候,正则表达式变成非贪婪的,就是尽可能少的匹配,这样就会逐一匹配出来了
kumico 2009-05-19
  • 打赏
  • 举报
回复
正则好工具:Expresso
工具之二: The Regulator

辅助生成、分析、测试正则表达式
非常好用,不可不试
zwg3857471 2009-05-19
  • 打赏
  • 举报
回复
1楼的可以用,能否帮忙解一下,这是我从网上拷过来的,对正则还是不太懂
femg93 2009-05-19
  • 打赏
  • 举报
回复
自己多试几遍应该就可以了
chenjunsheep 2009-05-19
  • 打赏
  • 举报
回复
路过,帮顶
wackyboy 2009-05-19
  • 打赏
  • 举报
回复

@"(?<url>(?<=<a\b\s+href\s*=\s*['""]?)[^'"">]+(?=['"">])).*?(?<Text>(?<=>)\s*[^\s<]+\s*(?=</a>))"
这个吧,我给你稍微的改了改

或者你的可以这样改
(? <url>(? <= <a href ?= ?('|\")?)[^'\">]+?(?='|\"|>)).*?(? <Text>(? <=>)[^ <]+?(?= </a>))

62,073

社区成员

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

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

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

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