Wie ich in meinem Kommentar für die allgemeinsten Fälle geschrieben habe, müßtest du den minimalen deterministischen endlichen Automaten der beiden Ausdrücke erzeugen und die beiden Automaten vergleichen. Nachdem gesagt wurde, dass es eine Bruteforce / Poorman Lösung für Ihre Frage geben könnte.
Anhand Ihrer Beispiele klingt es so, als ob Sie daran interessiert sind, zu sehen, ob eines von Eingabe / Muster mit allen Strings übereinstimmt, die vom anderen generiert wurden.
%Vor% Sie können überprüfen, ob input
tatsächlich mit einer Teilmenge von Zeichenfolgen übereinstimmt, die von pattern
generiert wurden, solange
- kannst du dich wirklich auf% beschränken und? Operatoren wie angegeben
- Ihre Eingabe- / Musterzeichenfolgen sind ziemlich kurz - genauer gesagt, das Auftreten von% in einer Eingabe oder einem Muster ist kleiner als etwa 20 oder so.
Die Grundidee besteht darin, eine Liste von repräsentativen Strings für input
zu generieren und diese mit Patterns mit der von Ihnen bevorzugten Regex-Engine zu vergleichen. Wenn alle Repräsentanten übereinstimmen - input
stimmt mit einer Untermenge von pattern
überein. Dieser Algorithmus für IsSubset
kann wie folgt beschrieben werden:
zum Beispiel, wenn die Eingabe ist? X% YZ% und die pattern
enthält nicht das Zeichen A die Liste wäre generiert
AXYZ
AXYZA
AXAYZ
AXAYZA
Es ist leicht zu sehen, dass die Anzahl der Strings in dieser Liste 2 ^ n ist, wobei n die Anzahl von '%' in der Eingabe ist.
Auch ist es einfach, die Reihenfolge der Argumente zu vertauschen und umgekehrt die Beziehung herauszufinden. Also in Wirklichkeit dein
%Vor%