请大家帮我看下我写的正则匹配href有什么不对的

tiandiyuzhou1 2010-07-24 11:53:12
(?is)(?<=<a\s.*?href=['"]).*?(?=['">])

<ul class="top">
<li class="a1 l">用户名
<input id="username" type="text" name="username" class="kuang" />
密码
<input id="password" type="password" name="password" class="kuang" />
</li>
<li class="a2 l">
<input checked="checked" value="company" name="loginType" type="radio" />
企业
<input value="person" name="loginType" type="radio" />
个人 </li>
<li class="a3 l">
<input id="HeadLogin" name="HeadLogin" type="image" onclick="javascript:return login();"
src="images/dl.gif" onmouseover="this.src='images/login_btn2.gif';" onmouseout="this.src='images/dl.gif';" />
</li>
<li class="a4 l">  <a href="/Reg/" rel="nofollow">注册会员</a>   <a
href="/Login/Forgot_Passwd.aspx" rel="nofollow">忘记密码</a></li>
<li class="a5 l">
欢迎您登录中国童装网!</li>
<li class="a6 l"><a style="cursor: pointer;" onclick="setHome(this,window.location)">
设为首页</a></li>
</ul>
</form>
</div>
<div class="wrapper">
<div class="logo l">
<img src="images/kids_logo.gif" width="165" height="70" alt="" /></div>
<div class="ad l">
<ul>
<li>

<script> showad('1016');</script>

</li>
<li>

<script> showad('1017');</script>

</li>
<li>

<script> showad('1018');</script>

</li>
</ul>
</div>
</div>
<div class="wrapper swf">
<div class="nav clear">
<ul class="menu clear">
<li class="s"><a href="/">首页</a></li>
<li><a href="/News/">童装新闻</a></li>
<li><a href="/Trade/">商机信息</a></li>
<li><a href="/Company/Brand.html">童装品牌</a></li>
<li><a href="/Company/">企业大全</a></li>
<li><a href="/Company/Product.html">产品展示</a></li>
<li><a href="/Join/">品牌加盟</a></li>
<li><a href="/Distributor/">经销代理</a></li>
<li><a href="/ForeignTrade/">外贸批发</a></li>
<li><a href="/Stock/">库存求购</a></li>
<li><a href="/Trade/Market.aspx">市场行情</a></li>
<li><a href="/BrandGuidebuy/">品牌导购</a></li>
<li><a href="/xm/">童鞋专区</a></li>

...全文
80 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
-过客- 2010-07-24
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 tiandiyuzhou1 的回复:]
匹配是可以成功
我这样写标准吗
[/Quote]

倒也没什么不可以的,看你的需求了
1、匹配不到<a href=www.test.com >abc</a>这样href=后直接加链接的
2、不能判断'或"是否成对出现,不过倒也没什么关系,一般不会有这样的数据源的

Regex reg = new Regex(@"(?i)<a[^>]*?href=(['""]?)([^'""\s>]+)\1");
MatchCollection mc = reg.Matches(yourStr);
foreach (Match m in mc)
{
richTextBox2.Text += m.Groups[2].Value + "\n";
}
tiandiyuzhou1 2010-07-24
  • 打赏
  • 举报
回复
匹配是可以成功
我这样写标准吗
tiandiyuzhou1 2010-07-24
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 lxcnn 的回复:]
引用 5 楼 tiandiyuzhou1 的回复:
(?i)<a[^>]*?href=(['""]?)([^'""\s>]+)\1
为什么它不是去找[^>]*?这个匹配的内容呢?
而是找(['""]?)这个匹配的内容?


这个涉及到贪婪与非贪婪模式的问题,简单来说,[^>]*?在可匹配可不匹配时,尽可能少的匹配,所以它只匹配到href前的空格
而如果换成[^>]*,在可匹配可不匹配……
[/Quote]谢谢过客大侠
经里你一说又有点理解贪婪与非贪婪模式了
不过我的最后一个问题没问好。重新开个贴子问
-过客- 2010-07-24
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 tiandiyuzhou1 的回复:]
(?i)<a[^>]*?href=(['""]?)([^'""\s>]+)\1
为什么它不是去找[^>]*?这个匹配的内容呢?
而是找(['""]?)这个匹配的内容?
[/Quote]

这个涉及到贪婪与非贪婪模式的问题,简单来说,[^>]*?在可匹配可不匹配时,尽可能少的匹配,所以它只匹配到href前的空格
而如果换成[^>]*,在可匹配可不匹配时,尽可能多的匹配,它会一直匹配到a标签的“>”前的字符,然后才进行回溯,释放已匹配的字符,直到href=匹配a标签中的href=成功为止

参考
正则基础之——贪婪与非贪婪模式
tiandiyuzhou1 2010-07-24
  • 打赏
  • 举报
回复
过客大侠
tiandiyuzhou1 2010-07-24
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 lxcnn 的回复:]
(['"]?) 在匹配成功以前,有三种可能,“'”、“"”或什么都没有

在(['"]?)一旦匹配成功,它匹配的内容就是固定的了,那此时\1的内容也就是固定的了,比如匹配的是“"”,那此时\1也要求匹配“"”,整个表达式才能匹配成功,也就达到了引号成对出现的目的
[/Quote]谢谢过客兄,刚看了你的那个878 9878的例子,明白了许多!
最后个问题!
(?i)<a[^>]*?href=(['""]?)([^'""\s>]+)\1
为什么它不是去找[^>]*?这个匹配的内容呢?
而是找(['""]?)这个匹配的内容?
-过客- 2010-07-24
  • 打赏
  • 举报
回复
(['"]?) 在匹配成功以前,有三种可能,“'”、“"”或什么都没有

在(['"]?)一旦匹配成功,它匹配的内容就是固定的了,那此时\1的内容也就是固定的了,比如匹配的是“"”,那此时\1也要求匹配“"”,整个表达式才能匹配成功,也就达到了引号成对出现的目的
tiandiyuzhou1 2010-07-24
  • 打赏
  • 举报
回复
(?i)<a[^>]*?href=(['""]?)([^'""\s>]+)\1
href=(['""]?)意思是href后面可以是没有引号的也可以是'或"吗?
([^'""\s>]+)意思是href后面的内容没有'或"或空白以外的字符(可以是1个或多个字符)
如果遇到"的就停止匹配是这个意思吗?
为什么加上\1结尾处就有"(例如<a href="/Reg")
没有加上\1结尾处就没有"(例如<a href="/Reg)

看了过客大侠的博客,说\1是反向引用,举了个(a|b)\1,匹配"abaa"结果是aa
还是有点不明白!
则表达式是烦琐的,但是强大的,学会之后的应用会让你除了提高效率外,会给你带来绝对的成就感。只要认真去阅读这些资料,加上应用的时候进行一定的参考,掌握正则表达式不是问题。

索引

href="mk:@MSITStore:C:Documents%20and%20Settingschenxh桌面dsfCHM.chm::/3.htm">1._引子
href="mk:@MSITStore:C:Documents%20and%20Settingschenxh桌面dsfCHM.chm::/4.htm">2._正则表达式的历史
href="mk:@MSITStore:C:Documents%20and%20Settingschenxh桌面dsfCHM.chm::/5.htm">3._正则表达式定义

href="mk:@MSITStore:C:Documents%20and%20Settingschenxh桌面dsfCHM.chm::/5.htm#3.1_普通字符">3.1_普通字符
href="mk:@MSITStore:C:Documents%20and%20Settingschenxh桌面dsfCHM.chm::/5.htm#3.2_非打印字符">3.2_非打印字符
href="mk:@MSITStore:C:Documents%20and%20Settingschenxh桌面dsfCHM.chm::/5.htm#3.3_特殊字符">3.3_特殊字符
href="mk:@MSITStore:C:Documents%20and%20Settingschenxh桌面dsfCHM.chm::/5.htm#3.4_限定符">3.4_限定符
href="mk:@MSITStore:C:Documents%20and%20Settingschenxh桌面dsfCHM.chm::/5.htm#3.5_定位符">3.5_定位符
href="mk:@MSITStore:C:Documents%20and%20Settingschenxh桌面dsfCHM.chm::/5.htm#3.6_选择">3.6_选择
href="mk:@MSITStore:C:Documents%20and%20Settingschenxh桌面dsfCHM.chm::/5.htm#3.7_后向引用">3.7_后向引用

href="mk:@MSITStore:C:Documents%20and%20Settingschenxh桌面dsfCHM.chm::/6.htm">4._各种操作符的运算优先级
href="mk:@MSITStore:C:Documents%20and%20Settingschenxh桌面dsfCHM.chm::/7.htm">5._全部符号解释
href="mk:@MSITStore:C:Documents%20and%20Settingschenxh桌面dsfCHM.chm::/8.htm">6._部分例子
href="mk:@MSITStore:C:Documents%20and%20Settingschenxh桌面dsfCHM.chm::/9.htm">7._正则表达式匹配规则

href="mk:@MSITStore:C:Documents%20and%20Settingschenxh桌面dsfCHM.chm::/9.htm#7.1_基本模式匹配">7.1_基本模式匹配
href="mk:@MSITStore:C:Documents%20and%20Settingschenxh桌面dsfCHM.chm::/9.htm#7.2_字符簇">7.2_字符簇
href="mk:@MSITStore:C:Documents%20and%20Settingschenxh桌面dsfCHM.chm::/9.htm#7.3_确定重复出现">7.3_确定重复出现

href="mk:@MSITStore:C:Documents%20and%20Settingschenxh桌面dsfCHM.chm::/10.htm">8._参考文献

62,054

社区成员

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

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

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

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