Gibt es eine Möglichkeit zu testen, ob ein regulärer Ausdruck einen anderen regulären Ausdruck "enthält"?
Zum Beispiel:
RegEX1 "enthält" RegEX2.
Soweit ich weiß - das kann nicht gemacht werden, liege ich falsch?
Ja.
Dieses Dokument enthält eine ausführliche Diskussion des Themas (siehe Abschnitt 4.4).
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.
Tags und Links regex