2017-11-14 6 views
1

Lesen dieses vim plugin Ich sehe diese Zeile:Was bedeuten Rohre zwischen Klammern in einer Regex?

syntax match tweeDelimiter "[<<|>>|\]\]|\[\[]" 

Für mich, dass regex nicht viel Sinn macht, wenn es von [] umgeben ist. Laut this "passen POSIX-Klammerausdrücke zu einem Zeichen aus einer Reihe von Zeichen".

Also stimmt das nicht < oder> oder [oder]? Ich weiß aus dem Kontext, dass es versucht, < < oder >> oder [[oder]] zu entsprechen.

+4

Sie haben Recht, die Regex macht nicht viel Sinn. Kurzform können Sie '[] [<> |]' oder '[\] [<> |]' (in Sprachen, die leere Sätze wie JavaScript akzeptieren) verwenden, die dasselbe Ergebnis liefern. Dies entspricht grundsätzlich den Zeichen '<|> []'. Ich glaube, die Absicht war eine Regex in dieser Form: '(<<|>> | \] \] | \ [\ [)', die entweder '<<', '>>', ']]' 'oder' [[' – ctwheels

+1

Imo das entspricht entspricht zu '[<> | \ [\]]' – Jan

+0

Ich bin nicht sicher, wie dieses Plugin insbesondere reguläre Ausdrücke verwendet, aber in PCRE können beide öffnenden/schließenden Klammern ein Trennzeichen bezeichnen, das auch in diesem Zusammenhang Sinn macht. – revo

Antwort

1

Das sieht tatsächlich wie ein Fehler im Plugin aus. Wenn sie will Paare dieser Zeichen entsprechen, hat es klar regexp Zweige (\|), keine Sammlung zu verwenden:

<<\|>>\|\]\]\|\[\[ 

Gäbe es zusätzliche Sachen zu passen, oben müssten in \%(...\) eingeschlossen sein, um es zu gruppieren. Die Verwendung von [...] entspricht jedoch jeder der enthaltenen Zeichen; Vim ignoriert einfach die Duplikate. Wie andere schon bemerkt haben, könnte dies in kürzerer Form geschrieben werden, zum Beispiel [][<>|].


Also, wenn das Plug-in der Tat fälschlicherweise Sachen Spiele wie <> und <[ statt nur << und [[, informieren Sie bitte seinen Autor über den Bug.

Verwandte Themen