Ich versuche, mindestens vier G-Wiederholungen, jede Wiederholung getrennt durch ein Maximum von 7 Zeichen. Beispiel:Perl reguläre Ausdruck Mismatchs repetitive Strings
AAGGGAAGGGAAAGGGAAGGGAA
Ich verwende folgende Regex, die Groß- und Kleinbuchstaben entsprechen sollte.
$sequence =~ /((G{3,}[ATGC]{1,7}){3,}G{3,})/gi
Dies sollte mindestens vier G-Wiederholungen entsprechen. Das Problem ist, dass ich einen positiven Erfolg, wenn ich die folgende Sequenz übereinstimmen:
aaagaggaaaaggggaaaaggggaaaaggggaaa
Die erste Wiederholung in dieser Sequenz enthält drei gs, durch eine ein getrennt. Daher sollte diese Sequenz nicht übereinstimmen.
Lösung 1: Das Problem schien der Modifikator/i zu sein. Ich könnte es korrigieren, indem Sie die Regex ändern:
$sequence =~ /(([gG]{3,}[aAtTgGcC]{1,7}){3,}[gG]{3,})/g
Lösung 2 von Ikegami zur Verfügung gestellt: Negative Lookahead.
$sequence =~ /(([?!G]{3,}[ATGC]{1,7}){3,}[G]{3,})/gi
Danke @ikegami für den Hinweis und für die Einreichung der Fehlerbericht.
Dort scheint [nicht zu sein] (https://regex101.com/r/osA53E/1) ein positiver Treffer in der zweiten Sequenz. –
@ Nicolas Maltais, das OP verwendet Perl, nicht PCRE. – ikegami
Wenn Sie mindestens 4 Gs abgleichen möchten, warum beginnt der Quantifizierer bei 3? Siehe http://perldoc.perl.org/perlre.html#Regular-Expressions – shawnhcorey