perl正则表达式中的模式分组疑问
在看perl语言入门的时候有个知识点完全不明白所以然,麻烦高手们通俗滴给讲解一下:”/(.)\1/表明需要匹配连续出现的两个同样字符“---这个正则表达式为什么可以这么匹...
在看perl语言入门的时候有个知识点完全不明白所以然,麻烦高手们通俗滴给讲解一下:
”/(.)\1/ 表明需要匹配连续出现的两个同样字符“ ---这个正则表达式为什么可以这么匹配呢?
我的理解是说(.)首先匹配一个字符,后面的\1再次重复(.)匹配的字符?不知道这样理解是否正确! 展开
”/(.)\1/ 表明需要匹配连续出现的两个同样字符“ ---这个正则表达式为什么可以这么匹配呢?
我的理解是说(.)首先匹配一个字符,后面的\1再次重复(.)匹配的字符?不知道这样理解是否正确! 展开
4个回答
展开全部
这是perl里模式分组的概念,如果不是很懂,可以找下小骆驼版的看下,里面说的很清楚。
对于perl:
在正则表达式中,小括号()的作用是对字符串分组,其出现的地方一般会触发正则表达式引擎捕获匹配到的字符串,然后捕获组会的把匹配小括号中模式的字符串保存到相应的地方。第一个()内所找到的字符串保存到$1和\1变量;第n个()内所找到的字符串保存到$n和\n变量中。
$x与\x的区别是:\x反向引用的是模式匹配期间得到的结果,即只有在模式匹配期间能使用;
而$x则是模式匹配结束后对得到的捕获内容的索引,即到下次出现正确匹配前,这个变量的内容会一直存在
对于你的例子”/(.)\1/
是 . 匹配一个字符,然后用()括起来,是把这个匹配的字符放在捕获变量1中,这样就可以用\1或$1来引用这个匹配的字符。所以/(.)\1/就是匹配二个连续的且相同的字符,就是你说的,再重复一次的意思。
对于perl:
在正则表达式中,小括号()的作用是对字符串分组,其出现的地方一般会触发正则表达式引擎捕获匹配到的字符串,然后捕获组会的把匹配小括号中模式的字符串保存到相应的地方。第一个()内所找到的字符串保存到$1和\1变量;第n个()内所找到的字符串保存到$n和\n变量中。
$x与\x的区别是:\x反向引用的是模式匹配期间得到的结果,即只有在模式匹配期间能使用;
而$x则是模式匹配结束后对得到的捕获内容的索引,即到下次出现正确匹配前,这个变量的内容会一直存在
对于你的例子”/(.)\1/
是 . 匹配一个字符,然后用()括起来,是把这个匹配的字符放在捕获变量1中,这样就可以用\1或$1来引用这个匹配的字符。所以/(.)\1/就是匹配二个连续的且相同的字符,就是你说的,再重复一次的意思。
展开全部
理解是正确的. \1 就是前面 ( ) 里的东西重覆了一次.
留意, 必须是 () , 不能是 [ ].
print "ok" if "12312" =~ /(123)\1/; # 这个不行
print "ok" if "123123" =~ /(123)\1/; # ok
'.' 就是匹配任何字元的意思. 包括数字, 空格, 符号, 或者你看不见的 ascii 字元, 例如 null
留意, 必须是 () , 不能是 [ ].
print "ok" if "12312" =~ /(123)\1/; # 这个不行
print "ok" if "123123" =~ /(123)\1/; # ok
'.' 就是匹配任何字元的意思. 包括数字, 空格, 符号, 或者你看不见的 ascii 字元, 例如 null
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
\1看上去是重复前面的内容,其实\1是一个变量捕获,第一个匹配到得内容会存入变量$1里
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
perl正则是 NFA 引擎,看表达式就行了
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询