use 5.010;
my $names='deep and future';
if ($names=~m/(\w+) (and|or) (\w+)/){
#2个(\w+)分别匹配and前和and后的字符串(不包括空格)
say "我获得了$1 and $3";
# future不被$2匹配,因为一个括号代表可捕捉位置,#$2模式串为and|or
}
输出: 我获得了 deep and future
再看一个更复杂的例子:
#perl4-8.pl
use 5.010;
my $names='Hello,Beijing';
if ($names=~m/(\w+)(,)(\w+)/){
#2个(\w+)分别匹配逗号前和逗号后的字符串(不包括空格),匹配位置分别为$1和$3
say "我获得了$1 and $3"; #$1为 Hello ,$3为 Beijing
}
#注意下面这次匹配,我们把逗号前的字符串和逗号放在一对括号内
if ($names=~m/((\w+)(,))(\w+)/){
#我们从左到右开始解读模式串((\w+)(,))(\w+)
#首先遇到一个左括号,我们找到它对应的右括号
#发现遇到的第一对括号内容为 ((\w+)(,))
# 接着寻找遇到的第二对括号 (\w+)
#然后是第三对括号 (,)
#最后是第四对括号 (\w+)
say "我获得了$2 and $4"; #$2为 Hello ,$4为 Beijing
}
输出结果如下:
我获得了Hello and Beijing
我获得了Hello and Beijing
使用$数字的形式表示匹配到的正则变量,括号匹配顺序为匹配模式串从左至右。$1代表第1对括号匹配到的字串,$2代表第2对括号匹配到的字串,$3代表第3对括号匹配到的字串,以此类推。