正则表达式--模式匹配--特殊变量(2)

$- | $+ | @+ | @-

 

与模式相关的变量在整个发生模式匹配的动态范围内都可见,换句话说,他们就像是local声明的一样,不用自己定义就能使用。

 

@+   à     @LAST_MATCH_END

@-    à     @LAST_MATCH_START

$+     à     $LAST_PAREN_MATCH

$^R  à     $LAST_REGEXP_CODE_RESULT

$&    à     $MATCH

$'      à     $POSTMATCH

$`      à     $PREMATCH

 

example:

my $str = "*****bange&&&&&mantou!!!!!chifan*****";

$str =~ /(bange)\S+(mantou)\S+(chifan)/;      

print "$-[0]\t$-[1]\t$-[2]\t$-[3]\t$-[-1]\n";       ###  5       5       15      26      26

print "$+[0]\t$+[1]\t$+[2]\t$+[3]\t$+[-1]\n";  ###  32      10      21      32      32

print "$+\n@-\n@+\n"; 

###

chifan

5 5 15 26

32 10 21 32

 

注:

 

>>一般匹配的情况下(没有圆括号),所有的$-[n],(n!=0/-1)的情况都是没有意义。\

这时:

$-[0]  匹配到的字符串的第一个字符的位置(所有的位置从0开始,下同)

$+[0]  匹配到的字符串的最后一个字符的后一个字符的位置。

位置:可以理解为偏移量。

 

>>特殊情况下(有一个或者多个圆括号),所有的$±[n],(n<=圆括号的个数)都是有意义,但是$-[0]和$+[0]都是多余的,因为$-[0]==$-[1],$+[0]=$+[n],(n=圆括号的个数)。

>>其他变量的含义(含有圆括号的情况下存在)

$-[1/2/3]  匹配到的第1/2/3个括号中内容的第一个字符的位置。

$+[1/2/3]  匹配到的第1/2/3个括号中内容的最后一个字符的下一个字符的位置。

@-/@+:分别是$-[n]/$+[n]的数组,以数组的形式保存位置。

$+:   最后一个圆括号中匹配上的字符串。

特别注意:$-并不是正则表达式的匹配变量,它存在于文件句柄中,意义是

$- --> $FORMAT_LINES_LEFT

 

>>例外变量

$^R,$*和$digits曾也是正则表达式的变量,但是现在不再使用或者本人测试时没有意义。当然我也不准备用那么多,以上的足够了,呵呵

 

>>摘抄

@-  最近一次正则表达式匹配的部分在目标字串中的起始偏移量

@+最近一次正则表达式匹配的部分在目标字串中的终止偏移量

$&  最近一次正则表达式匹配到的部分

$`   在目标字串中最近一次正则表达式匹配到的部分之前的内容

$'   在目标字串中最近一次正则表达式匹配到的部分之后的内容

·         $` is the same as substr($var,0,$-[0])

·         $& is the same as substr($var,$-[0],$+[0] - $-[0])

·         $' is the same as substr($var,$+[0])

·         $1 is the same as substr($var,$-[1],$+[1] - $-[1])

·         $2 is the same as substr($var,$-[2],$+[2] - $-[2])

·         $3 is the same as substr($var,$-[3],$+[3] - $-[3])

摘抄是博客乌托邦的内容,具体网址请移步到

http://blog.csdn.net/utopia_wang/article/details/1531285

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值