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

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


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

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
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.