请教RE:$string=~/(([ABC]{2,})\2{3,})/gi

请教RE:$string=~/(([ABC]{2,})\2{3,})/gi

请教RE:$string=~/(([ABC]{2,})\2{3,})/gi
$string=~/(([ABC]{2,})\2{3,})/gi
请问:
\2{3,}是什么意思?
$1,$2在此代表什么?
这类资料哪里有?我搜到的只讲到$string=~/[ABC]{2,}/gi啊.

简单给你解释下...
简单给你解释下。
\1 \2 就是 $1, $2 在表达式里面的写法

而 $1, $2 是第几个括号(左括号)所捕获的东西

$string = 'ABABABABD';
这样 ([ABC]{2,}) 这是第二个左括号,所以是 $2,它捕获了 AB
所以 \2 {3,} 就是后面还要有 ABABAB三次以上
$1 是第一个括号,所以捕获的是 ABABABAB

这样有点理解了吧?

$string = 'ABABABABD';
if ($string=~/(([ABC]{2,})\2{3,})/gi) {
print $1,"-",$2;
}

ABABABAB-AB




   

多谢fayland兄赐教!
多谢fayland兄赐教!
[CCB]2[/CCB]
现在顺了,呵呵.
[CCB]1[/CCB]
终于明白了...
终于明白了...
如何改进?
in.txt为:
AAA
ABCABC
ABABABABAB
[code]
open FH,"in.txt";
open STDOUT,">out.txt";
while(<FH>){
chomp;
$_=~/(([ABC]{1,})\2{1,})/gi;
print $1,"-",$2,"\n";
}
close FH;
[/code]
out.txt为:
AAA-A
ABCABC-ABC
ABABABAB-ABAB
期望out.txt为:
AAA-A
ABCABC-ABC
ABABABABAB-AB

如何改进?




   

$_=~/(([ABC]{1...
$_=~/(([ABC]{1,})*?\2{1,})/gi;

最小匹配

:)
受教了...
最小匹配-- 最小匹配

[CCB]2[/CCB]

呵呵,承教!