Meine Organisation hat eine hauseigene Sprache, mit Syntax wie:Vim Regex: Erfassung * erste * Instanz des Wortes zwischen den Zeichen
cmo/create/mo1///tri
createpts/brick/xyz/2,2,2/0.,0.,0./1.,1.,1./1,1,1
Ich bin eine Vim-Syntax-Datei zu schreiben, und möchte die erfassen erste Instanz eines Wortes durch zwei Zeichen eingeschlossen (in diesem Fall, /
), ohne Erfassen der Zeichen selbst.
Ie, würde die regex erfassen, aus den oben genannten Linien,
create
brick
Meine Lösung so weit, dieses Muster zu verwenden ist:
[,/=" "].\{-}[,/=" "]
Aber von /this/and/this/and/this
, wird es erfassen /this/
and
/this/
and
/this/
.
Wie Sie sehen können, ist das Problem zweifach: (i) meine aktuelle Lösung ist gierig und (ii) erfasst die /
Zeichen auch, wenn ich nur die Wörter von diesen eingeschlossen haben möchte.
Danke!
Verwenden Sie positive Lookbehind und positive Lookahead. Ich glaube, vim Syntax ist '\ @<=' für positive Lookbehind und '\ @ =' für positive Lookahead – ctwheels
Arbeit mit '\ zs' Übereinstimmung resetter'^(?: \ W +)?/\ Zs \ w + \ (/ \) \ @ = ' – revo
^, und Sie können' [^ /] * 'verwenden, um den Lookahead und' \ w * 'zu vermeiden, um die Gruppe zu vermeiden. – Ryan