Чи можна використовувати NOT у регулярному виразі в 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
Дивовижно! Я не помітив тих, що в документації. Дякую :)
Nagel

Це геніальне рішення, яке також враховує виникнення слова fooна початку чи в кінці тексту.
симумілеко

13

^ (Circumflex або caret) всередині квадратних дужок заперечує вираз. Отже, щоб знайти "foo", якому не передує ". міг би бути:

[^.]foo

це повинно бути, (^|[^.])(foo)а також він відповідає одному зайвому символу.
ctrl-alt-delor

Спасибі, Брайан! Це варіант, який я спробував спочатку, але я переплутав синтаксис і спробував ^ [\.] Замість [^ \.]: P
Nagel

1
Це не спрацює. Ви хочете, щоб усі символи, крім '.' що означає "будь-який персонаж". Вам потрібно уникнути цього: (^ | [^ \.]) (Foo)
Andras Gyomrey

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