regulärer Ausdruck "enthält" einen anderen regulären Ausdruck

8

Gibt es eine Möglichkeit zu testen, ob ein regulärer Ausdruck einen anderen regulären Ausdruck "enthält"?
Zum Beispiel:

%Vor%

RegEX1 "enthält" RegEX2.

Soweit ich weiß - das kann nicht gemacht werden, liege ich falsch?

OK, Joel.Neely hat gezeigt, dass es getan werden kann (habe es noch nicht gelesen ...) akademisch Kann es in einer Programmiersprache gemacht werden, sagen wir C #?
Wie effektiv wird das sein? Wie lange dauert es, 1000 Paare zu testen?     
Dror 06.01.2009, 13:07
quelle

2 Antworten

6

Ja.

Dieses Dokument enthält eine ausführliche Diskussion des Themas (siehe Abschnitt 4.4).

    
joel.neely 06.01.2009, 13:20
quelle
0

Das Konvertieren der beiden Ausdrücke in die entsprechenden Zustandsautomaten und das Überprüfen aller Pfade in beiden Maschinen ermöglichen die gleichen Übereinstimmungen, sollten aber ausreichen. Die pumpende Lemme sollte offensichtlich darauf bedacht sein, so alte Knoten zu vermeiden.

Es würde nur für "einfache" reguläre Ausdrücke (oder real, was hast du, Perls rekursive Ausdrücke sind viel ausdrucksvoller).

Während ein Graph der Zustandsmaschine eine große Anzahl von Pfaden haben kann, sollte er dennoch begrenzt sein (insbesondere wenn die Quelle für die Ausdrücke menschlich ist). Sie würden also alle zulässigen Pfade von RegEX1 finden und nacheinander prüfen, ob es in RegEX2 zulässig ist. Wenn alle Pfade gültig sind, wissen Sie, dass der eine in dem anderen enthalten ist.

    
Svend 10.06.2009 12:41
quelle

Tags und Links