Czy w TextMate można używać NOT w wyrażeniu regularnym?

22

Mam projekt Matlab, nad którym pracuję w edytorze OSX TextMate. Muszę znaleźć wszystkie wystąpienia określonego słowa, powiedzmy, że to „foo”, które nie jest poprzedzone przez „”. lub zastąpiony przez „/”.

Nie mogę jednak znaleźć żadnego sposobu wyszukiwania wyrażeń regularnych, które są zdefiniowane w ten sposób negatywnie. Czy ktoś wie, czy można wyszukać coś takiego jak „A poprzedzone czymkolwiek innym niż B”?

(TextMate korzysta z biblioteki wyrażeń regularnych Oniguruma autorstwa K. Kosako.)

Nagel
źródło

Odpowiedzi:

31

Chcesz użyć tego bitu składni:

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

W Twoim przypadku, (?<!\.)foo(?!/)

m4573r
źródło
1
Niesamowite! Przeoczyłem te w dokumentacji. Dzięki :)
Nagel,
To genialne rozwiązanie, które bierze również pod uwagę występowanie słowa foona początku lub na końcu tekstu.
simhumileco
13

^ (Daszek lub daszek) w nawiasach kwadratowych neguje wyrażenie. Aby znaleźć „foo”, nie poprzedzone „.” byłoby:

[^.]foo
Brian
źródło
powinno być, (^|[^.])(foo)a także pasowało do jednej dodatkowej postaci.
ctrl-alt-delor,
Dzięki, Brian! To jest wariant, który próbowałem początkowo, ale zawiodłem składnię i spróbowałem ^ [\.] Zamiast [^ \.]: P
Nagel
1
To nie zadziała. Chcesz wszystkich znaków oprócz „.” co oznacza „dowolny znak”. Musisz uciec: (^ | [^ \.]) (Foo)
Andras Gyomrey
[stuf] pasuje do liter s, t, u, f. Zawartość nawiasów kwadratowych NIE jest wyrażeniem, jest listą. [^.] to nic innego jak kropka. [^ \.] to wszystko, co nie jest ukośnikiem ani kropką. ^ i - to jedyne postacie, które czasami mają specjalne znaczenie w []
Sherwood Botsford