Questa interessante domanda Regex to match anything (including the empty string) except a specific given string riguarda come eseguire un look-out negativo in MySQL. Il poster ha voluto per ottenere l'effetto diCome convertire un PCRE in POSIX RE?
Kansas(?! State)
perché MySQL non implementa asserzioni look-ahead, un certo numero di risposte si avvicinò l'equivalente
Kansas($|[^ ]| ($|[^S])| S($|[^t])| St($|[^a])| Sta($|[^t])| Stat($|[^e]))
Il poster ha sottolineato che è una PITA da fare per potenzialmente molte espressioni.
Esiste uno script/utilità/modalità di PCRE (o qualche altro pacchetto) che convertirà un PCRE (se possibile) in una regex equivalente che non utilizza le caratteristiche snelle di Perl? Sono pienamente consapevole che alcune regex in stile Perl non possono essere dichiarate come espressioni regolari, quindi non mi aspetto che lo strumento faccia l'impossibile, ovviamente!
anni fa Ho visto uno strumento per convertire un'espressione regolare in NFA o DFA e tornare a un'espressione regolare, ma non riesco a trovarlo in questo momento. Questo strumento permetteva l'intersezione e il complemento delle espressioni regolari degli input, mentre IIRC l'espressione regolare ricostruita non utilizzava questi costrutti. –
Vale la pena notare che le due espressioni regolari nella domanda non sono esattamente equivalenti: sebbene entrambe facciano la stessa cosa nell'esempio originale, in alcune circostanze si comportano diversamente. Ad esempio, se usato in una sostituzione (ad esempio sostituendo 'Kansas' con' Home' nella stringa 'Kansas Starbucks'), il primo darà' Home Starbucks', mentre il secondo darà 'Homebucks'. A questo proposito, non è possibile avere un'espressione regolare POSIX standard che riproduca esattamente l'aspetto negativo. – psmears