Во-первых, на мой взгляд, регулярное выражение для L1 = {a^2n b^3m+1 | n>=1, m>=0}
НЕ что вы дали, но есть: aa(aa)*b(bbb)*
. Причина в том, что a^2n, n > 1
означает, что существует не менее 2 a
и номер пары a
.
Теперь регулярное выражение для "Any string except for aa(aa)*b(bbb)*"
является:
^(?!^aa(aa)*b(bbb)*$).*$
более подробно здесь: Regex101
Пояснения
aa(a)*b(bbb)*
регулярное выражение вы НЕ хотите, чтобы соответствовать
^
представляет начало строки
(?!)
отрицательный предпросмотр: не должны совпадать, что в этой группе
$
представляет собой конец линии
EDIT
Да, дополнение для aa(aa)*b(bbb)*
является "Any string but the ones that match aa(aa)*b(bbb)*"
.
Теперь вам нужно найти регулярное выражение, которое представляет собой синтаксис, который вы можете использовать. Я дал вам регулярное выражение в правильном ответе и соответствует "Any string but the ones that match aa(aa)*b(bbb)*"
, но если вы хотите получить математическое представление по шаблону, которое вы дали для L1, вам нужно найти что-то более простое.
Без какого-либо отрицательного предпросмотра, это было бы:
L2 = ^((b+.*)|((a(aa)*)?b*)|a*((bbb)*|bb(bbb)*)|(.*a+))$
Попробуйте здесь Regex101
Удачи с математическим переводом представления ...
Я должен представлять L2 = L1 L подставка для L; Предположим, что алфавит Σ = {a, b} – Azr4el