Perl 5.10规则表达式新特性(未完)

Perl 5.10规则表达式新特性(未完)

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++/
升级以后还是按照以前都方式,挨,都没多大区别。
哪天看看新特性去
好东西
谢谢啦。