正则表达式的捕获功能
1.捕获变量: $1,$2,$3…
$_ = 'http://www.perl.org/index.html' ; if (m#^http://([^/]+)(.*)#) { print "$1\n" ; # www.perl.org print "$2\n" ; # /index.html }
注意:
1.只有匹配成功时,捕获的变量才会被赋值。 若是没有匹配,那么对应位置上的捕获变量不会改变其值。
2.即使圆括号内的表达式能在字符串内匹配多次,它也只会捕获最后一次匹配的内容。
3.要找出捕获变量数字和圆括号的对应关系,不管括号潜逃多复杂,也只需从左到右依次数左括号即可。
4.特殊变量$+保存了最后一个非空捕获变量的内容。
2.捕获的反向引用
正则表达式本身可以反向引用匹配或调用之前捕获的内容。 以原子\1,\2,\3来表示,并依次匹配相应的缓存。
3.捕获并替换
捕获及匹配变量常常用于替换操作。在替换字串中出现的$1,$2,$&等变量。
要是替换的目的是去除匹配的内容,而非保留改写,那就不要使用捕获。
4.列表上下文的捕获
5.用正则表达式切词
#使用m//g的方法 while ( / (\d+) | #数字 ([+\-\/*()]) | #运算符 (\D) #数字以外的字符 /xg ) { if ($1 ne "") { push @tok,'num',$1 ; }elsif ($2 ne "") { push @tok,'punct' ,$2 ; } else { die "invalid char $3 in input"; } }