¿Es posible usar NOT en una expresión regular en TextMate?

22

Tengo un proyecto de Matlab en el que estoy trabajando en el editor de OSX TextMate. Necesito encontrar todas las instancias de una determinada palabra, digamos que es "foo", que tampoco está precedida por un "." o sucedido por un "/".

Sin embargo, no puedo encontrar ninguna forma de buscar expresiones regulares que se definan negativamente de esta manera. ¿Alguien sabe si es posible buscar algo como "A precedido por algo que no sea B"?

(TextMate utiliza la biblioteca de expresiones regulares Oniguruma de K. Kosako).

Nagel
fuente

Respuestas:

31

Desea usar este bit de la sintaxis:

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

En tu caso, (?<!\.)foo(?!/)

m4573r
fuente
1
¡Increíble! Pasé por alto los de la documentación. Gracias :)
Nagel
Esta es una solución brillante que también tiene en cuenta la aparición de la palabra fooal principio o al final del texto.
simhumileco
13

La ^ (circunfleja o caret) dentro de corchetes niega la expresión. Entonces, para encontrar un "foo" no precedido por un "." sería:

[^.]foo
Brian
fuente
eso debería ser (^|[^.])(foo)y también coincidía con un personaje adicional.
ctrl-alt-delor
Gracias Brian! Esta es la variante que probé inicialmente, pero estropeé la sintaxis e intenté ^ [\.] En lugar de [^ \.]: P
Nagel
1
Esto no funcionara. Quieres todos los caracteres excepto '.' que significa "cualquier personaje". Debes escapar: (^ | [^ \.]) (Foo)
Andras Gyomrey