免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12
最近访问板块 发新帖
楼主: qiuf
打印 上一主题 下一主题

问个有关perl贪婪匹配的问题 [复制链接]

论坛徽章:
0
11 [报告]
发表于 2010-09-08 12:42 |只看该作者
回复 5# 珞水的大叔


    这位大叔的表述让我稍稍有点理解了,也就是说:
perl在匹配时,还是遵循从左到右匹配的原则,只是在从左到右匹配的过程中,只要第一次匹配到模式,就不再继续匹配,而是固定起始指针,去后续的模式中寻找贪婪或非贪婪的结果。
如果是模式中没有加入非贪婪标示,就会尽可能按最长表达式返回匹配结果,而非贪婪的话就按最短原则来返回结果

对否?

论坛徽章:
0
12 [报告]
发表于 2010-09-08 12:50 |只看该作者
本帖最后由 qiuf 于 2010-09-08 12:52 编辑

6、7、9楼是没明白我想问啥,我知道[a-zA-Z]+的意义,也没说会匹配整个串,只是想了解为什么PERL匹配了第一个,就不再继续匹配而已,如果有时候我希望匹配的是最后一个或者第N个匹配的串,那不是很难做到?

事实上在'' just a test can you find me '里,能匹配上/\s*([a-zA-Z]+)\s*/这个模式的就有7个之多,
第一个是just,最后一个me也是满足的,里面每个单词都是符合模式定义的

论坛徽章:
0
13 [报告]
发表于 2010-09-08 12:54 |只看该作者
本帖最后由 wfnh 于 2010-09-08 13:03 编辑

回复 12# qiuf
如果你想匹配全部的话···你可以用g模式~~~然后在记忆变量里··自己找~~·

如果你不用g模式的话··perl一旦找到匹配·就会自动停止··这是perl的正则引擎所决定的···

论坛徽章:
0
14 [报告]
发表于 2010-09-08 13:08 |只看该作者
楼上的,请问g模式的如何输出全部的匹配项?

论坛徽章:
0
15 [报告]
发表于 2010-09-08 13:20 |只看该作者
回复 14# qiuf

第一个匹配的会存在$1里边·一次类推~~~~

当然·你可以返回一个数组嘛···

eg:
  1. $str='1234567';
  2. @match = $str=~/(\d)/g;#数组match存放所有的匹配项
  3. say "@match";
复制代码

论坛徽章:
0
16 [报告]
发表于 2010-09-08 15:14 |只看该作者
谢谢楼上,这用法不错,受教了

论坛徽章:
0
17 [报告]
发表于 2010-09-08 22:49 |只看该作者
楼主这个例子举得不好,应该比较一下 .*  和 .*? 就知道什么是贪婪了
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP