Perl的正则表达式的问题

$_ = "yabba dabba doo";
if( /y(.)(.)\2\1/){
}
想问下这个反向匹配是怎么经行的,特别是那个\2什么意思啊。。。

\2 代表模式里的第二个子表达式,在你这个例子里就是前面第二个括号所捕获的内容,也就是b,同理\1是第一个括号所捕获的内容,也就是a

反向匹配就是指在模式的后半部分中引用在模式前半部分中定义的子表达式

记得给分啊
温馨提示:内容为网友见解,仅供参考
第1个回答  2010-08-27
第一个括号里匹配的内容就是\1,第二个括号里的就是\2,以此类推...

举几个例子就明白了:
(.)\1 匹配 aa, 或bb
(.)(.)\1\2匹配 abab
(.)(.)\2\1匹配 abba
(...)\1匹配 abcabc
(.)..\1匹配 a**a本回答被提问者采纳
第2个回答  2010-08-30
()有匹配后存储的性能,你数()个数,第一个的匹配结果就是\1,第二个()的匹配结果就是\2,当然,如果没匹配上,就会报错,具体javascript处理的还和其他语言不一样。

如果要提升系统性能,不要()的这个存储功能,可以(?: ),即在小括号组内加上?:

Perl的正则表达式的问题
\\2 代表模式里的第二个子表达式,在你这个例子里就是前面第二个括号所捕获的内容,也就是b,同理\\1是第一个括号所捕获的内容,也就是a 反向匹配就是指在模式的后半部分中引用在模式前半部分中定义的子表达式 记得给分啊

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

---请问这个perl的正则表达式~ s\/[\\n\\r]*\/\/g
AAA =~ s\/[\\n\\r]*\/\/g =~s\/A\/B\/g 在模式匹配是 替换,就是将内容A替换成内容B,后面的g是全局,就是全部替换成。[ AB ]出现在中括号的是任意的其中一个,\\n \\r是换行符 ,[\\n\\r]* *号是0个或以上 总起来:将$AAA中的所有的换行符全部替换为空,也就是将所有换行去掉。

perl正则表达式 捕获
首先搞懂顺序问题:从perlre文档里面关于capture buffers的描述可以看出:Capture buffers are numbered from left to right,编号是从左到右的。也就是说,对于你这个表达式,最外面是$1, 中间是$2, 最里面是$3。但下面还有一句:but inside this construct the numbering is restarted for each branch...

perl 正则表达式中模式分组\/y((.)(.)\\3 \\2) d\\1\/ 是怎么匹配的?
这个正则表达式中有空格,所以这个正则表达式可以匹配 y字符跟两个任意字符,重复第三个字符,一个空格,重复第二个字符,一个空格,字符d,重复第二至第五个字符 这个正则可以匹配字符串 “ystt s dstt s”如果这个正则表达式中没有空格,或者在最后使用了x标记,则可以匹配字符串 "ysttsdstts"

Perl语言学习之正则表达式(regular expression)
Perl语言中的正则表达式是处理字符串模式的强大工具,其在各种编程语言中占据显著位置,尤其在Perl中表现卓越。有三种主要的操作形式:匹配(使用`=~`),替换(同样用`=~`),和转换,它们都是对具有特定模式的字符串进行操作的基础。在Perl的运用中,`=~`和`!~`符号起着关键作用。如果在表达式中没...

如何使用Perl正则表达式匹配以">"开头"<"结尾且中间包含至少一个汉字且...
按照你的要求编写的perl程序如下(见图,正则表达式为左右两个斜杠中间部分)

Perl兼容正则表达式函数-PHP8知识详解
, $string);最后,Perl兼容正则还能用于字符串切分,strtok()函数在此场景中非常实用,如下例所示:while (($token = strtok($string, $delimiter)) !== false) { echo $token . "";} 总结来说,PHP8中Perl兼容正则表达式功能强大,涵盖了字符串匹配、替换和切分等任务,是开发中的重要工具。

Perl正则表达式替换
str = "D2\\nE2\\nAB2";for $s (split "\\n",$str){print $s,"\\n";$s =~ s\/([A-Z]{1,2})(\\d+)\/\\$$1\\$$2\/g;print $s,"\\n";}关键代码就是 s =~ s\/([A-Z]{1,2})(\\d+)\/\\$$1\\$$2\/g;

perl中的正则表达式(my $me = $0) =~ s#.*[\\\/|\\\\]##; 是什么意思?_百度...
(my $mePref = $me) =~ s#(.*).pl#$1#;表示去掉.pl后缀名。在s\/\/\/操作符中,可以用#、!等来作为分隔符。(my $mePref = $me) =~ s#(.*).pl#$1#;也可以写为(my $mePref = $me) =~ s\/(.*).pl\/$1\/;me是用来控制该脚本在cmd中运行,而不是在cygwin中运行。是这个...

相似回答
大家正在搜