正则表达式的捕获功能

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";
  }




}
原文地址:https://www.cnblogs.com/tjxwg/p/2981831.html