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

在看perl语言入门的时候有个知识点完全不明白所以然,麻烦高手们通俗滴给讲解一下:”/(.)\1/表明需要匹配连续出现的两个同样字符“---这个正则表达式为什么可以这么匹... 在看perl语言入门的时候有个知识点完全不明白所以然,麻烦高手们通俗滴给讲解一下:

”/(.)\1/ 表明需要匹配连续出现的两个同样字符“ ---这个正则表达式为什么可以这么匹配呢?
我的理解是说(.)首先匹配一个字符,后面的\1再次重复(.)匹配的字符?不知道这样理解是否正确!
展开
 我来答
pengh1224
2012-10-18
知道答主
回答量:35
采纳率:0%
帮助的人:20.2万
展开全部
这是perl里模式分组的概念,如果不是很懂,可以找下小骆驼版的看下,里面说的很清楚。

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

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

对于你的例子”/(.)\1/
是 . 匹配一个字符,然后用()括起来,是把这个匹配的字符放在捕获变量1中,这样就可以用\1或$1来引用这个匹配的字符。所以/(.)\1/就是匹配二个连续的且相同的字符,就是你说的,再重复一次的意思。
百度网友c9e795dda
2012-10-17 · TA获得超过5167个赞
知道大有可为答主
回答量:1128
采纳率:0%
帮助的人:1137万
展开全部
理解是正确的. \1 就是前面 ( ) 里的东西重覆了一次.
留意, 必须是 () , 不能是 [ ].

print "ok" if "12312" =~ /(123)\1/; # 这个不行
print "ok" if "123123" =~ /(123)\1/; # ok
'.' 就是匹配任何字元的意思. 包括数字, 空格, 符号, 或者你看不见的 ascii 字元, 例如 null
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
b3and6
2012-10-23
知道答主
回答量:4
采纳率:0%
帮助的人:3.1万
展开全部
\1看上去是重复前面的内容,其实\1是一个变量捕获,第一个匹配到得内容会存入变量$1里
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
niejieqiang
2012-10-21 · TA获得超过142个赞
知道小有建树答主
回答量:329
采纳率:100%
帮助的人:206万
展开全部
perl正则是 NFA 引擎,看表达式就行了
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式