$- | $+ | @+ | @-
与模式相关的变量在整个发生模式匹配的动态范围内都可见,换句话说,他们就像是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])
摘抄是博客乌托邦的内容,具体网址请移步到