免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1967 | 回复: 7
打印 上一主题 下一主题

高手给解决一下正则表达式的问题? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-08-15 16:55 |只看该作者 |倒序浏览
请问 .*? 与 .+? 有区别么?
我知道.+?是非贪婪的匹配也就是匹配一个任意字符。那.*?是什么意思,什么也不匹配么?
再就是一个我们不是很明白在匹配中的()是做什么用。

论坛徽章:
0
2 [报告]
发表于 2008-08-15 16:57 |只看该作者
()
是用来截获 匹配到的字符
如果第一个()
则得到的是$1
以此类推

论坛徽章:
0
3 [报告]
发表于 2008-08-15 16:58 |只看该作者
建议你还是先好好去看小骆驼。的正则部份
看好后有问题再来问。

论坛徽章:
0
4 [报告]
发表于 2008-08-15 20:03 |只看该作者
我关键是想问.*?和.+?有什么区别

论坛徽章:
0
5 [报告]
发表于 2008-08-15 20:34 |只看该作者
http://bbs.chinaunix.net/thread-1243164-1-1.html
这里面你不是已经问过了.别人也回答你了.

论坛徽章:
0
6 [报告]
发表于 2008-08-15 21:46 |只看该作者
要是找到明确的答案,我就不来这里问了。比如.*?a
   到底匹配什么?
  对于aaaa这个串,是匹配aa呢,还是匹配a。

论坛徽章:
0
7 [报告]
发表于 2008-08-16 11:44 |只看该作者
原帖由 gjer301 于 2008-8-15 21:46 发表
要是找到明确的答案,我就不来这里问了。比如.*?a
   到底匹配什么?
  对于aaaa这个串,是匹配aa呢,还是匹配a。


那贴已经告诉你答案了,你就是需要个更直白的解释。。。
.*跟.+的区别,前者是匹配0或0个以上的字符,并且是贪婪匹配
                     后者是匹配1或1个以上的字符,并且是贪婪匹配
.*或.+后面加个?,就是把贪婪匹配改成非贪婪匹配,相应的:
                     .*?匹配0或0个以上的字符,优先匹配0个字符
                     .+?匹配1或1个以上的字符,优先匹配1个字符

举个例子,对于字符串   abab ,
.*b 匹配的结果是 abab ,先撇去正则引擎做的优化不说,.*b在进行匹配时,.*先是把“abab”全部吞掉,结果引擎发现.*后面还有个b,这样会导致匹配失败,因此.*把吞掉的"abab"吐出一个"b",这个时候匹配成功,因此整个匹配结束,.*最终匹配的结果是"aba"

.*?b匹配的结果是ab,.*?b在匹配时,.*?先是一个字符都不吞,结果引擎发现b跟"abab"中的第一个"a"不匹配,于是.*?吞进一个字符"a",然后再进行比较,发现这时候匹配成功,于是最终.*?匹配的结果是"a"

.+与.+?的区别类似

论坛徽章:
0
8 [报告]
发表于 2008-08-17 00:36 |只看该作者
好,这个回答好,谢谢哦
终于有答案了。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP