使用命名捕获,给匹配加标签

Perl 5.10 或更高的版本,?<LABEL>进行命名捕获。 而匹配之后,捕获的内容会保存在散列表%+中,以尖括号的名字作为散列表的键名:

use 5.010;
$_ = 'Buster and Mini' ;
if (/(?<first>\S+)/  and (?<second>\S+)/) }
  my ($first,$second) = ($+{first},$+{second});
  ...
}

这种技术同样适用于反向引用。 以前需要\1,\2等一一编号,现在只要用\k<label>语法引用命名捕获即可:

use 5.010;
$_ = 'Buster and 'Buster' ;
if (/(?<first>\S+)/  and \k<first>/) }
  say 'i found the same name twice!'
  ...
}

perl 5.10 还引入了相对位置的反向引用,以绝对位置定位反向引用的写法是\g加数字编号:\g1

这种写法必须对每一组捕获的编号从头数起,如果我们需要反向引用的部分是末端,则倒过来数更方便。

\g{-1}  注意:负号两边的花括号。

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