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.)

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(?!/)


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

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
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.