Est-il possible d'utiliser NOT dans une expression régulière dans TextMate?

22

J'ai un projet Matlab sur lequel je travaille dans l'éditeur OSX TextMate. J'ai besoin de trouver toutes les instances d'un certain mot, disons que c'est "foo", qui n'est pas non plus précédé d'un "." ou réussi par un "/".

Cependant, je ne trouve aucun moyen de rechercher des expressions régulières définies négativement comme ceci. Est-ce que quelqu'un sait s'il est possible de rechercher quelque chose comme "A précédé par autre chose que B"?

(TextMate utilise la bibliothèque d'expressions régulières Oniguruma de K. Kosako.)

Nagel
la source

Réponses:

31

Vous souhaitez utiliser ce bit de la syntaxe:

(?=subexp)         look-ahead
(?!subexp)         negative look-ahead
(?<=subexp)        look-behind
(?<!subexp)        negative look-behind

Dans ton cas, (?<!\.)foo(?!/)

m4573r
la source
1
Impressionnant! J'ai ignoré ceux de la documentation. Merci :)
Nagel
Il s'agit d'une solution brillante qui prend également en compte l'occurrence du mot fooau début ou à la fin du texte.
simhumileco
13

Le ^ (circonflexe ou caret) entre crochets annule l'expression. Donc, pour trouver un "foo" non précédé d'un "." serait:

[^.]foo
Brian
la source
cela devrait être (^|[^.])(foo)et il correspondait également à un caractère supplémentaire.
ctrl-alt-delor
Merci, Brian! C'est la variante que j'ai essayée initialement, mais j'ai foiré la syntaxe et essayé ^ [\.] Au lieu de [^ \.]: P
Nagel
1
Ça ne marchera pas. Vous voulez tous les caractères sauf '.' ce qui signifie «n'importe quel caractère». Vous devez y échapper: (^ | [^ \.]) (Foo)
Andras Gyomrey
[stuf] correspond aux lettres s, t, u, f. Le contenu entre crochets n'est PAS une expression, c'est une liste. [^.] est tout sauf période. [^ \.] est tout ce qui n'est pas une barre oblique inverse ou un point. ^ et - sont les seuls personnages qui ont parfois une signification particulière dans []
Sherwood Botsford