2016-08-02 37 views
1

Ich führe dies in MariaDB 10.0.26 auf PCRE 8.39.Ausschließen von datenspezifischen Ausdrücken, wenn zuerst eine Gruppe von Wörtern auftritt

Sagen wir, ich möchte Drucker, Cartridge, Toner Sets, Kits oder Bundles ausschließen.

Also schrieb ich folgendes:

(?<items>Printer|Cartridge|Toner)(?<sets>Kit|Bundle|Set)(?(?=\g<items>)(?!\g<sets>)) 

Die genannten Gruppen nicht viel Materie sollte ich alles nur versucht.

Einfach zu sagen, ich diesen Ausdruck wünschen:

titleField regexp '(?<items>Printer|Cartridge|Toner)(?<sets>Kit|Bundle|Set)(?(?=\g<items>)(?!\g<sets>))' to return 0 and not 1. 

ich an dieser Stelle bin verloren, was ich falsch mache, auch wenn dies etwas FACEPALM sein muss würdig (~~!). Bitte helfen.

+0

Sieht so aus, als ob Sie nach einem negativen Lookbehind suchen, aber da es nicht von unbekannter Breite sein kann, verwenden Sie ein Lookahead '^ (?!. * (Drucker | Toner | Toner). * (Kit | Bundle | Set)). * (Kit | Bundle | Set) ' –

+0

Wiktor, bitte posten Sie eine Antwort, damit ich sie als korrekt akzeptieren kann. ^ (?!. * (Drucker | Patrone | Toner). * (Kit | Bundle | Set)) Sie offensichtlich kopiert im zweiten Teil zweimal. Danke für die Hilfe, das hat funktioniert. –

Antwort

1

können Sie

^(?!.*(Printer|Cartridge|Toner).*(Kit|Bundle|Set)) 

Vorgriffs verwenden (?!.*(Printer|Cartridge|Toner).*(Kit|Bundle|Set)) wird das Spiel nicht, wenn ein String Printer enthält, Cartridge oder Toner ((Printer|Cartridge|Toner)) irgendwo nach 0+ Zeichen andere als eine neue Zeile (.*).

Sie können the regex here testen.