Negieren spezifische Linie Endsequenzen in RLIKE regex
Frage
Ich mag jede Zeile übereinstimmen, die nicht mit ‚CA‘ endet oder "CA [beliebige Anzahl]. Wie kann ich tun, dass RLIKE in MySQL? (Beachten Sie es nicht unterstützt?! Usw.).
Hier ist die regex für ein positives Spiel, ich brauche nur einen Weg, es zu negieren: '^.*[C][A][0-9]?$'
(Aufgrund einer peinlichen Architektur Einschränkung, ich will nicht not rlike ...
verwenden)
Lösung
Der Trick ist, verwandelte sie in eine Beschreibung dessen, was Sie Sie wollen übereinstimmen. Etwas endet nicht in CA oder CA (Ziffer), wenn:
Es endet mit etwas anderem als A oder eine Ziffer oder
Es endet mit etwas anderes als A, dann eine Ziffer oder
Es endet mit etwas anderes als C, dann A, dann eine Ziffer oder
Es endet mit etwas anderes als C, dann A, oder
Es ist gleich A, gefolgt von einer Ziffer oder
Es ist gleich A oder eine Ziffer oder
Es ist leer.
So:
rlike '[^A0-9]$|[^A][0-9]$|[^C]A[0-9]$|[^C]A$|^A[0-9]$|^[A0-9]$|^$'
Ungeprüfte, un- "optimiert", wahrscheinlich mindestens ein Fehler irgendwo in der oben.
Andere Tipps
Nun, die regex kommt aus einer Spalte in einer Tabelle, und die meisten der Muster dort bereits arbeiten. So wäre es am einfachsten, wenn ich dieses Muster machen könnte arbeiten innerhalb der bestehenden Struktur.
ich etwas Ähnliches einmal tat, was ich tat, war eine andere Spalte erstellen (ich glaube ich ein Bitfeld verwendet), die Optionen für den regulären Ausdruck (Fall-Unempfindlichkeit, Verankerung, Negation, etc.) enthalten sind. Ein ähnlicher Ansatz könnte für Sie arbeiten.