2016-04-11 4 views
1

Ich versuche, einen regulären Ausdruck, wo die gegebene Alphabet Σ ist zu lösen = {a, b}Wie gebe ich „eine beliebige Zeichenfolge mit Ausnahme ....“

Der erste Ausdruck ist:

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

, die die entsprechenden regex Mittel: aa(a)*b(bbb)*

Was ein regulärer Ausdruck für L2, Komplement von L1 wäre? Ist es richtig anzunehmen L2 = "Beliebige Zeichenkette außer für aa (b (bbb)")?

+0

Ich muss repräsentieren L2 = L1 L stehen für das Komplement von L; Nehmen Sie an, dass Alphabet Σ = {a, b} – Azr4el

Antwort

3

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 ...

+0

Was ist das? .. –

+0

Ist es richtig zu repräsentieren^((?! aa (a) * b (bbb) *)) * $ in der Computertheorie Weg? – Azr4el

+0

@ Tim007 ein negativer Lookahead, überprüfen Sie dies: http://StackOverflow.com/Questions/406230/regular-Expression-to-Match-Line-that-doesnt-Contain-A-Word –

0

Der erste Ausdruck ist:

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

Regex für L1 ist:

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

Regex demo
Eingangs

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

Spielen

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 für L2, Komplement von L1

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

Erklärung:
^aa(?:aa)*b(?:bbb)*$ L1 entspricht
^aa(?:aa)*b(?:bbb)*$(*SKIP)(*FAIL) alles passt L1 & scheitern
|^.*$ Matches andere überspringen wird die L1 nicht
Regex demo Spiele
Übereinstimmungen

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` 
Verwandte Themen