2016-07-02 6 views
0

Angenommen, ich möchte jede Iteration von orange finden, also nicht, gefolgt von apple and mit RegEx. Ich möchte auch, dass dies für den jeweiligen Plural funktioniert.Optionale Zeichen in einem Lookaround

Hier ist eine Liste von was sollte und sollte nicht gültig sein.

orange    - valid 
oranges   - valid 
an orange   - valid 
apple and orange - invalid 
apple and oranges - invalid 
apples and orange - invalid 
apples and oranges - invalid 

Der Code, den ich geschrieben habe, um dies bisher möglich zu machen, ist der folgende.

(?<!apples? and)oranges? 

Wenn ich es testen, erhalte ich einen Fehler, zurück zu dem optionalen s Charakter Tracing nach apple. Regex101 beschreibt den Fehler wie folgt.

Lookbehinds müssen null Breite haben, daher sind Quantifizierer nicht erlaubt.

Warum ist das? Wie kann ich dieses Problem lösen?

Antwort

3

Look-Behinds müssen eine feste Länge haben. Durch Angabe eines optionalen Zeichens geben Sie an, dass die Länge um eins variieren kann. Dies wird nicht akzeptiert. Aber Sie sind nicht durch die Anzahl der Look-Behinds begrenzt, die Sie ausführen, so dass Sie es in zwei Teile teilen können:

(?<!apple and)(?<!apples and)oranges? 
+0

Dies hat den Trick! Vielen Dank! – GarethPW