Ist es möglich, NOT in einem regulären Ausdruck in TextMate zu verwenden?

22

Ich habe ein Matlab-Projekt, an dem ich im OSX-Editor TextMate arbeite. Ich muss alle Instanzen eines bestimmten Wortes finden, sagen wir, es ist "foo", dem auch kein "vorausgeht." oder gefolgt von einem "/".

Ich kann jedoch keine Möglichkeit finden, nach regulären Ausdrücken zu suchen, die so negativ definiert sind. Weiß jemand, ob es möglich ist, nach etwas wie "A, dem etwas anderes als B vorausgeht" zu suchen?

(TextMate verwendet die Oniguruma-Bibliothek für reguläre Ausdrücke von K. Kosako.)

Nagel
quelle

Antworten:

30

Sie möchten dieses Bit der Syntax verwenden:

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

In deinem Fall, (?<!\.)foo(?!/)

m4573r
quelle
1
Genial! Ich habe die in der Dokumentation übersehen. Danke :)
Nagel
Dies ist eine hervorragende Lösung, die auch das Vorkommen des Wortes fooam Anfang oder Ende des Textes berücksichtigt .
Simhumileco
13

Das ^ (Zirkumflex oder Caret) in eckigen Klammern negiert den Ausdruck. So finden Sie ein "foo" ohne vorangestelltes "." wäre:

[^.]foo
Brian
quelle
das sollte auch sein (^|[^.])(foo)und es passte auch ein extra zeichen dazu.
Strg-Alt-Delor
Danke, Brian! Dies ist die Variante, die ich anfangs ausprobiert habe, aber ich habe die Syntax durcheinander gebracht und es mit ^ [\.] Statt [^ \.] Versucht: P
Nagel
1
Das wird nicht funktionieren. Sie möchten alle Zeichen außer '.' was bedeutet "ein beliebiges Zeichen". Sie müssen entkommen: (^ | [^ \.]) (Foo)
Andras Gyomrey