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

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


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

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
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.