早教吧 育儿知识 作业答案 考试题库 百科 知识分享

perl正则表达式反向引用\g代表什么意思?my$names="FredFlintstoneandWilmaFlintstone";if($namesm/(?\S+)and\S+\g{lastname}/){say"Isaw$+{lastname}";}为什么这里\g{lastname}g去掉了,就匹配不了了?

题目详情
perl 正则表达式反向引用\g代表什么意思?
my $names = "Fred Flintstone and Wilma Flintstone";
if ( $names m/(?\S+) and \S+ \g{last_name}/ ) {
say "I saw $+{last_name}";
}
为什么这里\g{last_name} g去掉了,就匹配不了了?
▼优质解答
答案和解析
1.官网中的语法:
\g{name} Named backreference
表示后向匹配的意思
2.后向匹配,简单说就是:
匹配,前面已经查找过的某段内容,该段内容,是已经被括号包起来的,叫做组group,组的名字叫做name
你这里就是
之前用
(?\S+)
匹配到了
Flintstone
后面用
\g{last_name}
去匹配,前面的那个
Flintstone
所以,如果去掉,你这段匹配的语法,就和实际字符串,不吻合了.所以去掉就匹配不了了.
不过要注意的是,如果是去查找字符串,即使去掉,也可以匹配到前面那部分:
Fred Flintstone and Wilma

这下明白了吧?
关于后向匹配,更详细的解释,感兴趣的话去看:
(正则的含义是一样的,只是写法有点区别而已,所以可以参考的)
【教程】详解Python正则表达式之: (?