Я пытаюсь совместить не менее четыре G-повтора, каждый повтор разделяется максимум на 7 символов. Пример:Perl регулярное выражение несоответствие повторяющихся строк
AAGGGAAGGGAAAGGGAAGGGAA
Я использую следующее регулярное выражение, которое должно соответствовать символам верхнего и нижнего регистра.
$sequence =~ /((G{3,}[ATGC]{1,7}){3,}G{3,})/gi
Это должно соответствовать по меньшей мере четырем повторениям G. Проблема заключается в том, что я получаю положительный удар, когда я сопрягать следующую последовательность:
aaagaggaaaaggggaaaaggggaaaaggggaaa
первый повтор в этой последовательности содержит три Gs, отделенные друг от друга а. Поэтому эту последовательность не следует сопоставлять.
Решение 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 за подсказку и за отправку отчета об ошибке.
[не похоже] (https://regex101.com/r/osA53E/1) положительное воздействие на вторую последовательность. –
@Nicolas Maltais, OP использует Perl, а не PCRE. – ikegami
Если вы хотите совместить не менее 4 G, почему квантификатор начинается с 3? См. Http://perldoc.perl.org/perlre.html#Regular-Expressions – shawnhcorey