É possível usar NOT em uma expressão regular no TextMate?


22

Eu tenho um projeto Matlab no qual estou trabalhando no editor OSX TextMate. Eu preciso encontrar todas as instâncias de uma determinada palavra, digamos que seja "foo", que não seja precedida por um "." ou sucedido por um "/".

No entanto, não consigo encontrar nenhuma maneira de procurar expressões regulares definidas negativamente dessa maneira. Alguém sabe se é possível procurar algo como "A precedido por algo diferente de B"?

(O TextMate usa a biblioteca de expressões regulares Oniguruma de K. Kosako.)

Respostas:


31

Você deseja usar este bit da sintaxe:

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

No seu caso, (?<!\.)foo(?!/)


1
Impressionante! Eu negligenciei aqueles na documentação. Obrigado :)
Nagel

Esta é uma solução brilhante que também leva em consideração a ocorrência da palavra foono início ou no final do texto.
simhumileco 24/08/19

13

O ^ (circunflexo ou sinal de intercalação) dentro de colchetes nega a expressão. Então, encontrar um "foo" não precedido por um "." seria:

[^.]foo

deve ser (^|[^.])(foo)e também corresponde a um caractere extra.
Ctrl-alt-delor 20/09/12

Obrigado Brian! Esta é a variante que eu tentei inicialmente, mas eu errei a sintaxe e tentei ^ [\.] Em vez de [^ \.]: P
Nagel

1
Isso não vai funcionar. Você deseja todos os caracteres, exceto '.' o que significa 'qualquer personagem'. Você precisa escapar dela: (^ | [^ \.]) (
Foo
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.