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)

War es hilfreich?

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.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top