2017-09-18 3 views
0

Ich habe versucht zu lernen, wie Vim Plugins zu schreiben und die erforderlichen Zahlen übereinstimmen, die eine Sprache mit zu arbeiten erlauben würde, und zu versuchen, es mit verschiedenen Farben zu markieren und schrieb in sehr Magie-Modus folgende regex:Regex für wissenschaftliche Zahl und Hex- und Dezimalzahlen für vim erzeugt Fehler, während für Perl funktioniert?

syntax match cNumberGroup "\v\d+" 
syntax match cNumberGroup "\v0x\x+" 
syntax match cNumberGroup "\v[+\-]?(?:0|[1-9]\d*)(?:\.\d*)?(?:[eE][+\-]?\d+)?" 

Der der erste ist für Dezimalzahlen. Die zweite für Hex-Zahlen Die dritte ist für wissenschaftliche Zahlen Darstellungen.

Die ersten beiden funktionieren gut, aber die letzte funktioniert nicht. Ich möchte wissen, warum es nicht funktioniert und auch das. Gibt es eine bessere Möglichkeit, alle Regex zu schreiben, um effizient alle drei Zahlensysteme abzudecken.

Danke.

+0

Ich erhalte eine Fehlermeldung: 'E64:? folgt nichts. – Carpetsmoker

+3

Wahrscheinlich, weil Sie '(?: ...)' verwenden, was in Vim nicht unterstützt wird. Vim Regexps sind nicht Perl-kompatibel. Ein Überblick über die Unterschiede finden Sie unter ': help perl-patterns'. – Carpetsmoker

Antwort

3

Nur Slapping \v (sehr magisch) in von der regulären Ausdruck macht nicht Vim Regular Expression Syntax Perl-kompatibel. Wie @Carpetsmoker bereits kommentiert hat, zeigt :help perl-patterns die Unterschiede.

Für Ihr Beispiel die (?:...) hat als \v%(...) geschrieben werden:

syntax match cNumberGroup "\v[+\-]?%(0|[1-9]\d*)%(\.\d*)?%([eE][+\-]?\d+)?" 
Verwandte Themen