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

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


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

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
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.