Perl正则表达式与重复字符串不匹配

时间:2016-12-10 02:16:37

标签: regex perl mismatch

我正在尝试匹配至少四个G重复,每个重复最多分隔7个字符。例如:

AAGGGAAGGGAAAGGGAAGGGAA

我使用以下正则表达式,它应匹配大写和小写字符。

$sequence =~ /((G{3,}[ATGC]{1,7}){3,}G{3,})/gi

这应该匹配至少四个G重复。问题是,当我匹配以下序列时,我得到了积极的打击:

aaagaggaaaaggggaaaaggggaaaaggggaaa

此序列中的第一个重复包含三个g,用a分隔。因此,不应匹配此序列。

解决方案1:问题似乎是/ i修饰符。我可以通过修改正则表达式来纠正它:

 $sequence =~ /(([gG]{3,}[aAtTgGcC]{1,7}){3,}[gG]{3,})/g

解决方案2由ikegami提供:否定前瞻。

$sequence =~ /(([?!G]{3,}[ATGC]{1,7}){3,}[G]{3,})/gi

感谢@ikegami提示并提交错误报告。

1 个答案:

答案 0 :(得分:4)

$ perl -E'say $& while "aaagaggaaaaggggaaaaggggaaaaggggaaa" =~ /((G{3,}[ATGC]{1,7}){3,}G{3,})/gi'
gggaaaaggggaaaagggg

您发现了一个错误!我提交了bug report

这个错误至少从5.10开始就存在,并且它出现在最新版本(5.24.0)中。

更新:修复了在2017-05-30上发布的Perl 5.26。

相关问题