试图捕获perl正则表达式中的干预序列

时间:2014-07-26 02:26:58

标签: regex perl

因此,我正在使用Perl正则表达式对含有两种酶的DNA序列进行基本的限制性消化。我有一个更大的程序,但似乎我应该能够用正则表达式在几行中完成这个。使用输入的DNA序列,我需要捕获酶切位点,以及连续位点之间的所有DNA。

输入: CATCCCCCGTCAAAAACACTTGAAAAACAT

酶1切割位点 CA

酶2切割位点: TG

预期输出:

CATCCCCCGTCA

CAAAAACA

CACTTG

TGAAAAACA

CAT

我使用以下脚本:

my $input = "CATCCCTCGTCAAAAACACTTGAAAAACAT";

my $enzyme1="CA";
my $enzyme2="TG";

@cuts = $input =~ /(CA|TG[.]*CA|TG)/ig;

foreach $cut (@cuts){
    print "$cut\n";
}

然而,当我得到以下内容时:

CA

CA

CA

TG

CA

为什么我的正则表达式没有捕获两个切割位点加上干预序列?我使用括号进行捕获,但它一定不正确。

感谢您的帮助。

1 个答案:

答案 0 :(得分:3)

您可以使用Positive Lookahead断言捕获来获得重叠匹配:

my @cuts = ( $input =~ /(?=((?:CA|TG).*?(?:CA|TG|$)))/ig );

Working Demo