È possibile utilizzare NOT in un'espressione regolare in TextMate?


20

Ho un progetto Matlab sul quale sto lavorando nell'editor OSX TextMate. Devo trovare tutti i casi di una determinata parola, diciamo che è "pippo", che non è neppure preceduto da un "." o riuscito da un "/".

Tuttavia, non riesco a trovare alcun modo per cercare espressioni regolari definite negativamente in questo modo. Qualcuno sa se è possibile cercare qualcosa come "A preceduto da qualcosa di diverso da B"?

(TextMate utilizza la libreria di espressioni regolari Oniguruma di K. Kosako.)

Risposte:


26

Vuoi usare questo bit della sintassi:

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

Nel tuo caso, (?<!\.)foo(?!/)


1
Eccezionale! Ho trascurato quelli nella documentazione. Grazie :)
Nagel,

Questa è una soluzione geniale che tiene conto anche della ricorrenza della parola fooall'inizio o alla fine del testo.
simhumileco,

12

Il ^ (circonflesso o cursore) all'interno delle parentesi quadre nega l'espressione. Quindi, per trovare un "pippo" non preceduto da un "." sarebbe:

[^.]foo

quello dovrebbe essere (^|[^.])(foo)e anche abbinare un personaggio in più.
ctrl-alt-delor,

Grazie Brian! Questa è la variante che ho provato inizialmente, ma ho incasinato la sintassi e ho provato ^ [\.] Invece di [^ \.]: P
Nagel

1
Questo non funzionerà. Vuoi tutti i personaggi tranne '.' che significa "qualsiasi personaggio". Devi scappare: (^ | [^ \.]) (Foo)
Andras Gyomrey
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.