免费注册 查看新帖 |

Chinaunix

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

Perl 5.10规则表达式新特性(未完) [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-08-25 17:05 |只看该作者 |倒序浏览
1.关联回溯参照
可以用\g1或\g{1}或\g(1)代替原来的\1.
引用紧跟的组使用\g(-1),\g{-1},\g-1,引用再前面的组使用\g(-2),以此类推。
例:$a99a = '([a-z])(\d)\g(-1)\g(-2)'; #matches a11a,g22g,x33x,etc.

2.命名回溯参照
给捕获的组附加一个名字,可写为(?...)或(?'name'...).
回溯参照时用\k{name},\k'name'或\g{name},\g'name'.可以为多个组添加相同名字,但只有第一个能被引用。在规则表达式外命名捕获缓冲区是通过哈希变量%+来访问,例:$+{name}。
%-则存放命名捕获缓冲区的数组,例:$-{name}[0].
例:if ("foo bar baz"=~/(?

foo)\s*(?bar)\s*(?baz)/) {
   print "Buffer '$_' is '$+{$_}'\n" for keys(%+);
}
输出为:
Buffer 'p' is 'foo'
Buffer 'r' is 'baz'
Buffer 'q' is 'bar'

3.调整捕获组的计数
例:if ($time =~ /(\d\d|\d)\d\d)|(\d\d)(\d\d)/) {
      # process hour and minute
}
处理结果需要检查$1,$2,$3,$4中的值。使用(?|...)则可以简单的实现
if ($time =~ /(?|(\d\d|\d)\d\d)|(\d\d)(\d\d))/) {
      print "hour=$1 minute=$2\n";
}

4.位置信息
匹配的位置信息存放在数组@-和@+中。$-[0]是整个匹配开始的位置,$+[0]是整个匹配的结束位置;$-[n]是$n匹配的开始位置,$+[n]是$n匹配的结束位置
$` <=> substr($x,0,$-[0])
$& <=> substr($x,$-[0],$+[0]-$-[0])
$' <=> substr($x,$+[0])

5.独占数量匹配
在表示数量的匹配后再加一个+,实现最多匹配但禁止回溯。即/(?>X)+/可以写为/X++/

论坛徽章:
0
2 [报告]
发表于 2008-08-25 17:08 |只看该作者
升级以后还是按照以前都方式,挨,都没多大区别。
哪天看看新特性去

论坛徽章:
0
3 [报告]
发表于 2008-08-25 17:09 |只看该作者
好东西

论坛徽章:
0
4 [报告]
发表于 2008-08-26 17:48 |只看该作者
谢谢啦。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP