Erstens, meiner Meinung nach ist die Regex für L1 = {a^2n b^3m+1 | n>=1, m>=0}
NICHT was du gabst aber ist: aa(aa)*b(bbb)*
. Der Grund ist, dass a^2n, n > 1
bedeutet, dass es mindestens 2 a
und eine Paarnummer von a
gibt.
nun der reguläre Ausdruck für "Any string except for aa(aa)*b(bbb)*"
ist:
^(?!^aa(aa)*b(bbb)*$).*$
mehr Details hier: Regex101
Erläuterungen
aa(a)*b(bbb)*
die Regex Sie nicht wollen,
^
übereinstimmen steht für den Anfang der Zeile
(?!)
negative Vorschau: sollte nicht dem entsprechen, was in dieser Gruppe ist
$
stellt Zeilenende
EDIT
Ja, eine Ergänzung für aa(aa)*b(bbb)*
ist "Any string but the ones that match aa(aa)*b(bbb)*"
.
Jetzt müssen Sie eine Regex finden, die das mit der Syntax darstellt, die Sie verwenden können. Ich gab Ihnen eine Regex in dieser Antwort, die korrekt ist und "Any string but the ones that match aa(aa)*b(bbb)*"
entspricht, aber wenn Sie eine mathematische Darstellung nach dem Muster wollen, das Sie für L1 angegeben haben, müssen Sie etwas einfacher finden.
Ohne negative Vorschau, das wäre:
L2 = ^((b+.*)|((a(aa)*)?b*)|a*((bbb)*|bb(bbb)*)|(.*a+))$
-Test hier bei Regex101
Viel Glück mit der mathematischen Darstellung Übersetzung ...
Ich muss repräsentieren L2 = L1 L stehen für das Komplement von L; Nehmen Sie an, dass Alphabet Σ = {a, b} – Azr4el