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.)

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(?!/)


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

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
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.