2016-05-05 11 views
4

Angenommen, ich will:Regex Match Alle außer?

TESTGRID - NOT MATCH 
testgrid - NOT MATCH 
ACTIVEID - MATCH 
activeID - MATCH 
testRID - MATCH 

Ich habe versucht:

(?!([^GR]))ID*?\b (I really thought I had it with this one - Don't match ID if it is preceeded with GR, right? 
(?!([^GRID]))ID*?\b 
(?!([GRID]))ID*?\b 

Nichts davon funktioniert.

Ich schwöre, ich werde besser mit regex, obwohl :) Ich habe es geschafft, die letzten 6 Versuche, knock out, ohne von SO Hilfe zu suchen, aber ich bin wieder stecken :(

+0

Meinten Sie '(?

+0

Wiktor, das hat es getan. (? John

Antwort

3

Don ‚t ID übereinstimmen, wenn es mit GR

vorausgeht wenn Sie meinen, ID übereinstimmen, die am Ende des Wortes ist, und ist nicht mit GR voraus, verwenden

(?<!GR)ID\b 

Siehe this regex demo

Beachten Sie, dass (?<!GR) ist ein negativer Lookbehind, die das Spiel schlägt fehl, wenn das Muster Lookbehind in der Zeichenfolge ein Spiel links von der aktuellen Position befindet. Wenn Sie [^GR], eine negierte Zeichenklasse, verwenden, dann wird nur ein einzelnes Symbol/Zeichen auf (ein anderes Zeichen als G und R) geprüft, kein Zeichen Sequenz.

+0

In diesem Fall möchte ich nur die ID am Ende des Wortes. Ich war nah dran und du hast auf meinen Fehler hingewiesen, also danke :) Ich werde in 8 weiteren Minuten lol akzeptieren. – John

+0

Ich entfernte den irrelevanten Teil und fügte einen Demo-Link hinzu. –