perl 正则表达式反向引用\g代表什么意思?

my $names = "Fred Flintstone and Wilma Flintstone";
if ( $names =~ m/(?<last_name>\S+) and \S+ \g{last_name}/ ) {
say "I saw $+{last_name}";
}
为什么这里\g{last_name} g去掉了,就匹配不了了?

1.官网中的语法:
\g{name} Named backreference
表示后向匹配的意思

2.后向匹配,简单说就是:
匹配,前面已经查找过的某段内容,该段内容,是已经被括号包起来的,叫做组group,组的名字叫做name
你这里就是
之前用

(?<last_name>\S+)
匹配到了
Flintstone
后面用
\g{last_name}
去匹配,前面的那个
Flintstone

所以,如果去掉,你这段匹配的语法,就和实际字符串,不吻合了。所以去掉就匹配不了了。
不过要注意的是,如果是去查找字符串,即使去掉,也可以匹配到前面那部分:
Fred Flintstone and Wilma


这下明白了吧?

关于后向匹配,更详细的解释,感兴趣的话去看:
(正则的含义是一样的,只是写法有点区别而已,所以可以参考的)

【教程】详解Python正则表达式之: (?<=…) positive lookbehind assertion 后向匹配 /后向断言

(此处不给贴地址,请自己用google搜标题,即可找到帖子地址)
温馨提示:内容为网友见解,仅供参考
第1个回答  2012-12-12
命名回溯,就是跟\1差不多,只不过是取了个名字last_name

perl 正则表达式反向引用\\g代表什么意思?
表示后向匹配的意思 2.后向匹配,简单说就是:匹配,前面已经查找过的某段内容,该段内容,是已经被括号包起来的,叫做组group,组的名字叫做name 你这里就是 之前用 (?<last_name>\\S+)匹配到了 Flintstone 后面用 \\g{last_name} 去匹配,前面的那个 Flintstone 所以,如果去掉,你这段匹配的语...

Perl学习05之正则表达式
正则表达式基础正则表达式是一种强大的工具,它能判断字符是否符合特定模式。基础的元字符如点号(.)匹配任意一个字符,星号(*)匹配前一个字符0次或多次,加号(+)则至少匹配一次。问号(?)允许0次或1次匹配,竖线(|)表示或的关系。字符集如[a-z]匹配小写字母,[0-9]匹配数字。特殊符号如\\b匹配单词...

正则表达式
3、反向引用:在反斜线的后面接上数字编号,如:\\1、\\2 。相应的数字表示对应顺序的捕获组。4、用\\g{N}来表示反向引用写法,其中N是想要反向引用的组号。四、择一匹配 1、竖线(|)     通常可以读成“或”,意思是要么匹配左边的内容,要么匹配右边的内容。2、字符集 ...

JavaScript中的正则有几个不同于其他语言的地方
我们都知道正则中有反向引用(back reference),也就是用一个反斜杠+数字的形式引用到前面的某个捕获分组已经匹配到的字符串,目的是用来再次匹配或作为替换结果(\\变成$).但有种特殊情况是,如果那个被引用的捕获分组还没开始(左括号为界),就使用了反向引用,会怎样.比如正则\/(\\2(a)){2}\/,(a)是第二个捕获分组...

ss.replaceAll("[\\\\d]+", ""); 这里"[\\\\d]+"是什么意思
\\d代表数字, [\\\\d]+ 数字出现一次或多次,匹配数字 这句话的意思是把字符串的数字替换为空,也就是说去除所有数字下面介绍下正则1. 正则表达式规则1.1 普通字符 字母、数字、汉字、下划线、以及后边章节中没有特殊定义的标点符号,都是"普通字符"。表达式中的普通字符,在匹配一个字符串的时候,匹配与之相同的一个...

相似回答