2016-05-09 17 views
0

Ich lese Regular Expression in Algorithmen von Robert Sedgwick Buch.regulären Ausdruck Auswertung in String-Matching

hier für reguläre Ausdrücke Erwähnung unter

A* | (A*BA*BA*)* 

Hier Autor erwähnt Streichhölzer sind: AAA, BBAABB und BABAAA. stimmt nicht überein mit dem obigen regulären Ausdruck ABA BBB BABBAAA.

Meine Frage ist, wie BBAABB übereinstimmt und wie BABAAA übereinstimmt. Bitte erkläre es.

Im Allgemeinen bin ich auf der Suche nach wie mit | zu bewerten und * Operatoren in regulären Ausdrücken. im folgenden Beispiel, wie wir b im Satz bekommen können, wenn wir ein + haben, da es besagt, dass wir mindestens 1 a haben müssen.

(a+b)* = (λ, a, b, aa, ab, ba, bb, aaa, ...) 
+3

Versuchen Sie es bei regex101.com. Sie werden sehen, dass der 2. Zweig "BB" (und "ABAB", "BAB", "BABA", "ABBA", "ABABA" usw.) oder nichts entsprechen kann. –

Antwort

0

Es gibt einen Unterschied zwischen * und +. Das Zeichen, nach dem Sie * setzen, kann keine Wiederholung haben. Aber in + Fall kann es mindestens 1 Wiederholung haben. In A* | (A*BA*BA*)* ist BBAABB gilt für folgende Gründe, und es wird nach (A*BA*BA*)* Mustern

  1. No A beim Start für A*
  2. 1 B für BA* und keine A
  3. 1 B für BA* und 2 A
  4. * am Ende (A*BA*BA*)* zeigt, dass Muster wiederholen kann. So ist die zweite Wiederholung BB, die
  5. ist

Dies sind die Punkte, für die BBAABB gültig ist.