Regex in Vi: Wie benutzt man Zeichenklassen in Gruppen? (zB [\ s \ w])


15

In Vim entspricht die Zeichenklasse einem \sbeliebigen Leerzeichen. Wenn ich diese Sonderzeichen in Gruppen verwende [\s\w], stimmt sie beispielsweise nicht mit einem einzelnen Leerzeichen oder Wortzeichen überein, sondern mit soder w.

Wie verwendet man Zeichenklassen in Gruppen?


8
Im Gegensatz zu einigen Implementierungen von Modulen für reguläre Ausdrücke scheint Vim diese Notation nicht zu unterstützen. [[:space:][:alnum:]_]kann verwendet werden, um die Sammlung von \sund zu approximieren \w.
Peter Lewerin

@PeterLewerin Bitte poste das als Antwort.
Christopher Bottoms

@ChristopherBottoms: fertig.
Peter Lewerin

Antworten:


11

Dies ist keine Gruppe, sondern ein Bereich, und in Vim können keine Zeichenklassen verwendet werden (obwohl dies in anderen Regex-Implementierungen, z . B. in Python, möglich ist ). Sie müssen stattdessen eine Alternative verwenden:

/\(\w\|\s\)

oder:

/\v(\s|\w)

(oder die von Peter Lewerin vorgeschlagene Lösung ).


2
Nur weil man einen ungültigen Bereich in einer Zeichenklasse erstellen kann, heißt das nicht, dass es nicht möglich sein sollte, so etwas wie \sin einer Zeichenklasse zu verwenden. Die Regex-Implementierung von Vim hat diese Wahl getroffen, aber bei anderen Implementierungen können Sie sie verwenden [\s].
Jamessan

@VanLaser Wenn Sie die Antwort mit diesen Informationen bearbeiten ([\ s] ist in anderen Regex-Implementierungen möglich, aber nicht in vim), akzeptiere ich Ihre Antwort!
John HK

(alles
klar

11

Im Gegensatz zu einigen Implementierungen von Modulen für reguläre Ausdrücke scheint Vim diese Notation ( [\s\w]) in Auflistungen nicht zu unterstützen . Man kann jedoch POSIX-Zeichenklassenausdrücke verwenden .

  • [:blank:]ist das gleiche wie \s.
  • [:space:]stimmt mit einer größeren Anzahl von Leerzeichen überein als dies der \sFall ist und scheint äquivalent zu zu sein \_s.
  • [:alnum:]approximiert \w, stimmt aber nicht mit dem Unterstrich ( _) überein .

Die gewünschte Sammlung könnte also als [[:blank:][:alnum:]_]oder geschrieben werden [[:space:][:alnum:]_].

Ich habe dies nicht durch Tests überprüft, aber es ist dokumentiert in :h regexp, :h /character-classesund :h /collection.

Hinweis zur Portabilität: In anderen Regex-Engines \sist dies in der Regel dasselbe wie in Vim [:space:](oder \_s).

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.