perl正则表达式中的模式分组疑问

在看perl语言入门的时候有个知识点完全不明白所以然,麻烦高手们通俗滴给讲解一下:

”/(.)\1/ 表明需要匹配连续出现的两个同样字符“ ---这个正则表达式为什么可以这么匹配呢?
我的理解是说(.)首先匹配一个字符,后面的\1再次重复(.)匹配的字符?不知道这样理解是否正确!

这是perl里模式分组的概念,如果不是很懂,可以找下小骆驼版的看下,里面说的很清楚。

对于perl:
在正则表达式中,小括号()的作用是对字符串分组,其出现的地方一般会触发正则表达式引擎捕获匹配到的字符串,然后捕获组会的把匹配小括号中模式的字符串保存到相应的地方。第一个()内所找到的字符串保存到$1和\1变量;第n个()内所找到的字符串保存到$n和\n变量中。

$x与\x的区别是:\x反向引用的是模式匹配期间得到的结果,即只有在模式匹配期间能使用;
而$x则是模式匹配结束后对得到的捕获内容的索引,即到下次出现正确匹配前,这个变量的内容会一直存在

对于你的例子”/(.)\1/
是 . 匹配一个字符,然后用()括起来,是把这个匹配的字符放在捕获变量1中,这样就可以用\1或$1来引用这个匹配的字符。所以/(.)\1/就是匹配二个连续的且相同的字符,就是你说的,再重复一次的意思。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2012-10-17
理解是正确的. \1 就是前面 ( ) 里的东西重覆了一次.
留意, 必须是 () , 不能是 [ ].

print "ok" if "12312" =~ /(123)\1/; # 这个不行
print "ok" if "123123" =~ /(123)\1/; # ok
'.' 就是匹配任何字元的意思. 包括数字, 空格, 符号, 或者你看不见的 ascii 字元, 例如 null本回答被网友采纳
第2个回答  2012-10-23
\1看上去是重复前面的内容,其实\1是一个变量捕获,第一个匹配到得内容会存入变量$1里
第3个回答  2012-10-21
perl正则是 NFA 引擎,看表达式就行了
相似回答