怎样找到~~前后匹配的~~~~?

怎样找到~~前后匹配的~~~~?

$a="AAAACCCCTTTAGCCCGGgG";

while ($a=~/CCC/g) {
       
        print "$& and $+[0]\n";
}

这个程序运行后:
CCC and 7
CCC and 16

其实大家可以看到~~~在8的位置上也有一个CCC,但是因为7的位置已经匹配过,就造成这部分~~~无法匹配
请问各位大侠怎样来解决问题~~~

使运行出来的结果为:
CCC and 7
CCC and 8
CCC and 16
求助呀~~~~~~~~


QUOTE:
原帖由 wubingran 于 2008-9-9 17:05 发表
$a="AAAACCCCTTTAGCCCGGgG";

while ($a=~/CCC/g) {
       
        print "$& and $+[0]\n";
}

这个程序运行后:
CCC and 7
CCC and 16

其实大家可以看到~~~在8的位置上也有一个CCC,但是因为7的位置已经匹 ...

while ( $a =~ /C(?=CC)/g ) {
        print "$&CC and " . ($+[0]+2) . "\n";
}
这个昨天似乎在QQ群上告诉你了,如果要用正则的话可以用 前瞻
我觉得还是不用正则比较好。


QUOTE:
原帖由 redspider 于 2008-9-10 10:40 发表
这个昨天似乎在QQ群上告诉你了,如果要用正则的话可以用 前瞻
我觉得还是不用正则比较好。

那个方法的确可以~~~~不过~~~这样
一是不太好找位点(我要找的是转录起始位点上游,这个已经编好),如果改用substr,得重新编~~~~
二是这样不断的赋值,不断的小字段的搜索~需要很多时间~~~~我要找的是很多序列文件组成的很大~~~不太现实~~~·


QUOTE:
原帖由 ly5066113 于 2008-9-10 09:22 发表


while ( $a =~ /C(?=CC)/g ) {
        print "$&CC and " . ($+[0]+2) . "\n";
}

首先表示感谢~~~~~

能解释一下:
$a =~ /C(?=CC)/g

以及$&CC    什么意思不?


QUOTE:
原帖由 wubingran 于 2008-9-10 12:17 发表



首先表示感谢~~~~~

能解释一下:
$a =~ /C(?=CC)/g

以及$&CC    什么意思不?

?= 向前断言,匹配。

大骆驼第五章 模式匹配好象没有做详细的讲解。
还是看 perldoc perlre 吧。虽然是英文的,但我感觉看起来还不是很累(俺英文很差的)。
xiexie~~~~~~
这种东西用 向前断言


QUOTE:
原帖由 wubingran 于 2008-9-10 12:14 发表


那个方法的确可以~~~~不过~~~这样
一是不太好找位点(我要找的是转录起始位点上游,这个已经编好),如果改用substr,得重新编~~~~
二是这样不断的赋值,不断的小字段的搜索~需要很多时间~~ ...

我没有说用 substr 了,那样效率很低的。
我是说, 如果用正则的话可以用 前瞻,就是楼上所说的 前向断言。
如果是我就不用正则,直接一个个比较就 OK 了