Можно ли использовать НЕ в регулярном выражении в TextMate?

22

У меня есть проект Matlab, над которым я работаю в редакторе OSX TextMate. Мне нужно найти все экземпляры определенного слова, скажем, «foo», которому также не предшествует «.» или после "/".

Тем не менее, я не могу найти способ поиска регулярных выражений, которые отрицательно определены, как это. Кто-нибудь знает, можно ли искать что-то вроде «A, которому предшествует что-либо, кроме B»?

(TextMate использует библиотеку регулярных выражений Oniguruma К. Косако.)

Nagel
источник

Ответы:

31

Вы хотите использовать этот бит синтаксиса:

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

В твоем случае, (?<!\.)foo(?!/)

m4573r
источник
1
Потрясающие! Я пропустил это в документации. Спасибо :)
Нагель
Это блестящее решение, которое также учитывает появление слова fooв начале или конце текста.
simhumileco
13

Символ ^ (в форме круга или каретки) в квадратных скобках отрицает выражение. Таким образом, чтобы найти «foo» не предшествует «.» было бы:

[^.]foo
Брайан
источник
это должно быть, (^|[^.])(foo)и это также соответствует одному дополнительному символу.
Ctrl-Alt-Delor
Спасибо, Брайан! Это вариант, который я попробовал изначально, но я испортил синтаксис и попробовал ^ [\.] Вместо [^ \.]: P
Nagel
1
Это не сработает. Вы хотите, чтобы все символы, кроме "." что означает «любой персонаж». Вам нужно избежать этого: (^ | [^ \.]) (Foo)
Андрас Гомрей
[stuf] соответствует буквам s, t, u, f. Содержимое квадратных скобок НЕ является выражением, это список. [^.] совсем не точка. [^ \.] - это все, что не является косой чертой или точкой. ^ и - единственные символы, которые иногда имеют особое значение в []
Шервуд Ботсфорд