TextMate'de normal ifadede NOT kullanmak mümkün müdür?


22

OSX editörü TextMate'de üzerinde çalıştığım bir Matlab projem var. Belirli bir kelimenin tüm örneklerini bulmalıyım, diyelim ki "foo", ya bir "." veya bunu "/" izledi.

Ancak, bu şekilde negatif olarak tanımlanan düzenli ifadeleri aramak için herhangi bir yol bulamıyorum. Herkes "A'dan önce B dışında bir şey" aramanın mümkün olup olmadığını biliyor mu?

(TextMate, K. Kosako'nun Oniguruma düzenli ifade kütüphanesini kullanmaktadır.)

Yanıtlar:


31

Sözdiziminin bu bitini kullanmak istiyorsunuz:

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

Senin durumunda, (?<!\.)foo(?!/)


1
Müthiş! Belgelerde bulunanları göz ardı ettim. Teşekkürler :)
Nagel

Bu, foometnin başında veya sonunda kelimenin oluşumunu da dikkate alan parlak bir çözümdür .
simhumileco

13

Köşeli parantez içindeki ^ (inceltme veya düzeltme işareti) ifadeyi reddeder. Yani "foo" ile başlayan bir "foo" bulmak. olabilir:

[^.]foo

olmalı (^|[^.])(foo)ve ayrıca bir ekstra karakterle eşleşti.
ctrl-alt-delor

Teşekkürler, Brian! Bu başlangıçta denediğim varyant, ancak sözdizimini berbat ettim ve [^ \.]
Yerine

1
Bu işe yaramaz. 'Hariç' tüm karakterleri istiyorsunuz. yani 'herhangi bir karakter' anlamına gelir. Kaçmak gerekiyor: (^ | [^ \.]) (Foo)
Andras Gyomrey

[stuf] s, t, u, f harfleriyle eşleşir. Köşeli parantezlerin içeriği bir ifade DEĞİLDİR, bir listedir. [^.] nokta dışında bir şeydir. [^ \.] ters eğik çizgi veya nokta olmayan herhangi bir şeydir. ^ ve - bazen [] 'de özel bir anlamı olan tek karakterdir
Sherwood Botsford
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.