Wenn zwei Strings mit * Wildcards angegeben sind, würde ich gerne wissen, ob eine Zeichenkette erstellt werden könnte, die beiden entspricht.
Zum Beispiel sind diese beiden Fälle ein einfacher Überlappungsfall:
Aber das sind auch alle:
Gibt es dafür einen Algorithmus? Oder vielleicht eine Dienstprogrammfunktion in Windows oder einer Bibliothek, die ich aufrufen oder kopieren könnte?
Da jeder glob als regulärer Ausdruck geschrieben werden kann und der Schnittpunkt zweier regulärer Ausdrücke gefunden werden kann (sofern sie nicht wirklich regulär sind, aber in diesem Fall wären sie), können Sie den Schnittpunkt zweier Globs durch finden sie in reguläre Ausdrücke umwandeln und dann die Schnittmenge von diesen finden. So können Sie herausfinden, ob sich zwei Globs schneiden, indem Sie den Schnittpunkt der regulären Ausdrücke finden und prüfen, ob dieser leer ist.
Da jedoch Globs begrenzter als regulärer Ausdruck sind, gibt es einen viel leichteren Weg:
Nennen wir die zwei Globs g1 und g2. Sie schneiden sich iff
Eine Beispielimplementierung in haskell:
%Vor%Dieser Algorithmus ist nicht besonders effizient, wenn die Globs viele Platzhalter enthalten, aber es ist sehr einfach zu implementieren und da Sie wahrscheinlich mit Dateinamen arbeiten, bezweifle ich, dass Sie mehr als 1000 Zeichen haben.
Wie ich verstehe, versuchen Sie festzustellen, ob eine Regex orthogonal zu einer anderen Regex ist? Wenn das so ist, ist das kein sehr triviales Problem.
Hier finden Sie mehr über Theorie
Hier ist die Lösung: Java-Bibliothek.
Verwendung:
%Vor%Tags und Links algorithm string language-agnostic string-comparison