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


22

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

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

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

Ответы:


31

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

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

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


1
Потрясающие! Я пропустил это в документации. Спасибо :)
Нагель

Это блестящее решение, которое также учитывает появление слова fooв начале или конце текста.
simhumileco

13

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

[^.]foo

это должно быть, (^|[^.])(foo)и это также соответствует одному дополнительному символу.
Ctrl-Alt-Delor

Спасибо, Брайан! Это вариант, который я попробовал изначально, но я испортил синтаксис и попробовал ^ [\.] Вместо [^ \.]: P
Nagel

1
Это не сработает. Вы хотите, чтобы все символы, кроме "." что означает «любой персонаж». Вам нужно избежать этого: (^ | [^ \.]) (Foo)
Андрас Гомрей

[stuf] соответствует буквам s, t, u, f. Содержимое квадратных скобок НЕ является выражением, это список. [^.] совсем не точка. [^ \.] - это все, что не является косой чертой или точкой. ^ и - единственные символы, которые иногда имеют особое значение в []
Шервуд Ботсфорд
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.