Apakah mungkin untuk menggunakan TIDAK dalam ekspresi reguler di TextMate?

22

Saya memiliki proyek Matlab yang sedang saya kerjakan di editor OSX TextMate. Saya perlu menemukan semua contoh kata tertentu, katakanlah itu "foo", yang tidak diawali dengan "." atau digantikan oleh "/".

Namun, saya tidak dapat menemukan cara untuk mencari ekspresi reguler yang didefinisikan secara negatif seperti ini. Adakah yang tahu apakah mungkin mencari sesuatu seperti "A yang didahului oleh selain B"?

(TextMate menggunakan pustaka ekspresi reguler Oniguruma oleh K. Kosako.)

Nagel
sumber

Jawaban:

31

Anda ingin menggunakan sedikit sintaks ini:

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

Dalam kasus anda, (?<!\.)foo(?!/)

m4573r
sumber
1
Luar biasa! Saya mengabaikan yang ada di dokumentasi. Terima kasih :)
Nagel
Ini adalah solusi cemerlang yang juga memperhitungkan kemunculan kata foodi awal atau akhir teks.
simhumileco
13

^ (Circumflex atau caret) di dalam tanda kurung kotak meniadakan ekspresi. Jadi untuk menemukan "foo" tidak diawali dengan "." akan menjadi:

[^.]foo
Brian
sumber
yang seharusnya (^|[^.])(foo)dan juga cocok dengan satu karakter tambahan.
ctrl-alt-delor
Terima kasih, Brian! Ini adalah varian yang saya coba pada awalnya, tetapi saya mengacaukan sintaks dan mencoba ^ [\.] Alih-alih [^ \.]: P
Nagel
1
Ini tidak akan berhasil. Anda ingin semua karakter kecuali '.' yang berarti 'karakter apa saja'. Anda perlu menghindarinya: (^ | [^ \.]) (Foo)
Andras Gyomrey