web-dev-qa-db-fra.com

regex pour faire correspondre quelque chose s'il n'est pas précédé par autre chose

Donc, avec regex en Java, je veux écrire une regex qui correspondra si et seulement si le motif n'est pas précédé de certains caractères. Par exemple:

String s = "foobar barbar beachbar crowbar bar ";

Je veux faire correspondre si bar n'est pas précédé de foo. Donc, la sortie serait:

barbar
beachbar
crowbar
bar

Je sais que c'est probablement une question très simple. J'essaie d'apprendre le regex, mais en attendant, j'ai besoin de quelque chose pour travailler maintenant.

118
b3bop

Vous voulez utiliser negative lookbehind comme ça:

\w*(?<!foo)bar

(?<!x) _ signifie "seulement s'il n'a pas" x "avant ce point".

Voir Expressions régulières - Lookaround pour plus d'informations.

Edit : ajout du \w* pour capturer les caractères précédents (par exemple "plage").

206
Adam Rofer