Diese interessante Frage Regex to match anything (including the empty string) except a specific given string besorgt, wie man eine negative Vorausschau in MySQL macht. Das Plakat, welches die Wirkung vonWie konvertiert man eine PCRE zu einer POSIX RE?
Kansas(?! State)
bekommen wollte, weil MySQL nicht Vorgriff Behauptungen umzusetzen, kam eine Reihe von Antworten auf das äquivalente
Kansas($|[^ ]| ($|[^S])| S($|[^t])| St($|[^a])| Sta($|[^t])| Stat($|[^e]))
Das Plakat wies darauf hin, das ist ein PITA für potenziell viele Ausdrücke.
Gibt es ein Skript/Dienstprogramm/Modus von PCRE (oder einem anderen Paket), das ein PCRE (wenn möglich) in einen äquivalenten Regex konvertiert, der nicht die pfiffigen Funktionen von Perl verwendet? Ich bin mir völlig bewusst, dass einige Perl-Regex nicht als normale Regex bezeichnet werden können, also würde ich nicht erwarten, dass das Tool das Unmögliche möglich macht!
Vor Jahren habe ich ein Werkzeug zum Umwandeln eines Regex in ein NFA oder DFA und zurück zu einem Regex gesehen, aber ich kann es jetzt nicht finden. Dieses Werkzeug erlaubte eine Überschneidung und Ergänzung in Eingabe-Regexes, und IIRC die rekonstruierte Regex verwendete diese Konstrukte nicht. –
Es ist erwähnenswert, dass die beiden regulären Ausdrücke in der Frage nicht exakt gleichwertig sind: Obwohl beide im ursprünglichen Beispiel dasselbe tun, verhalten sie sich unter bestimmten Umständen unterschiedlich. Zum Beispiel, wenn in einer Substitution verwendet (z. B. Ersetzen von "Kansas" durch "Home" in der Zeichenfolge "Kansas Starbucks"), die erste gibt "Home Starbucks", während die zweite "Homebucks" geben wird. In dieser Hinsicht ist es nicht möglich, einen regulären POSIX-Regressionsausdruck zu verwenden, der genau das negative Vorausschauverhalten nachahmt. – psmears