2016-04-11 5 views
1

Я пытаюсь решить регулярное выражение, где данный алфавит Σ = {а, Ь}Как я представляю «Любая строка за исключением ....»

Первое выражение:

L1 = {a^2n b^(3m+1) | n >= 1, m >= 0} 

, что означает соответствующее регулярное выражение является: aa(a)*b(bbb)*

что бы регулярное выражение для L2, дополнение L1? Правильно ли считать L2 = «Любая строка, за исключением aa (a) b (bbb)"?

+0

Я должен представлять L2 = L1 L подставка для L; Предположим, что алфавит Σ = {a, b} – Azr4el

ответ

3

Во-первых, на мой взгляд, регулярное выражение для 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

Удачи с математическим переводом представления ...

+0

Что это? .. –

+0

Правильно ли представлять в теории вычислений^((?! aa (a) * b (bbb) *)) * $? – Azr4el

+0

@ Tim007 отрицательный взгляд, проверьте это: http://stackoverflow.com/questions/406230/regular-expression-to-match-line-that-doesnt-contain-a-word –

0

Первое выражение:

L1 = {a^2n b^(3m+1) | n >= 1, m >= 0} 

Regex для L1 является:

^aa(?:aa)*b(?:bbb)*$ 

Regex demo
Входной

a 
b 
ab 
aab 
abb 
aaab 
aabb 
abbb 
aaaab 
aaabb 
aabbb 
abbbb 
aaaaab 
aaaabb 
aaabbb 
aabbbb 
abbbbb 
aaaaaab 
aaaaabb 
aaaabbb 
aaabbbb 
aabbbbb 
abbbbbb 
aaaabbbb 

соответствий

MATCH 1 
1. [7-10] `aab` 
MATCH 2 
1. [30-35] `aaaab` 
MATCH 3 
1. [75-81] `aabbbb` 
MATCH 4 
1. [89-96] `aaaaaab` 
MATCH 5 
1. [137-145] `aaaabbbb` 

Regex для L2, дополнение L1

^aa(?:aa)*b(?:bbb)*$(*SKIP)(*FAIL)|^.*$ 

Объяснение:
^aa(?:aa)*b(?:bbb)*$ соответствует L1
^aa(?:aa)*b(?:bbb)*$(*SKIP)(*FAIL) ничего соответствует L1 пропустит & неудачу
|^.*$ Удачные другие, которые не соответствуют L1
Regex demo
Соответствует

MATCH 1 
1. [0-1] `a` 
MATCH 2 
1. [2-3] `b` 
MATCH 3 
1. [4-6] `ab` 
MATCH 4 
1. [11-14] `abb` 
MATCH 5 
1. [15-19] `aaab` 
MATCH 6 
1. [20-24] `aabb` 
MATCH 7 
1. [25-29] `abbb` 
MATCH 8 
1. [36-41] `aaabb` 
MATCH 9 
1. [42-47] `aabbb` 
MATCH 10 
1. [48-53] `abbbb` 
MATCH 11 
1. [54-60] `aaaaab` 
MATCH 12 
1. [61-67] `aaaabb` 
MATCH 13 
1. [68-74] `aaabbb` 
MATCH 14 
1. [82-88] `abbbbb` 
MATCH 15 
1. [97-104] `aaaaabb` 
MATCH 16 
1. [105-112] `aaaabbb` 
MATCH 17 
1. [113-120] `aaabbbb` 
MATCH 18 
1. [121-128] `aabbbbb` 
MATCH 19 
1. [129-136] `abbbbbb`