W Vimie klasa znaków \s
pasuje do dowolnego znaku spacji. Kiedy używam tych znaków specjalnych w grupach, np [\s\w]
. Nie pasuje do żadnego pojedynczego spacji lub znaku, pasuje s
lub w
.
Jak używać klas postaci w grupach?
regular-expression
John HK
źródło
źródło
[[:space:][:alnum:]_]
może być użyty do przybliżenia kolekcji\s
i\w
.Odpowiedzi:
To nie jest grupa, to zakres, aw Vimie nie można używać klas postaci (chociaż jest to możliwe w innych implementacjach wyrażeń regularnych, np. W pythonie ). Zamiast tego musisz użyć alternacji :
lub:
(lub rozwiązanie zaproponowane przez Petera Lewerina ).
źródło
\s
w klasie znaków. Zdarza się, że implementacja wyrażeń regularnych Vima dokonała tego wyboru, ale inne implementacje pozwalają na użycie[\s]
.W przeciwieństwie do niektórych implementacji mechanizmów wyrażeń regularnych, Vim nie obsługuje tej notacji (
[\s\w]
) w kolekcjach. Można jednak użyć wyrażeń klasy znaków POSIX .[:blank:]
jest taki sam jak\s
.[:space:]
dopasowuje większą liczbę białych znaków niż\s
robi i wydaje się być równoważne\_s
.[:alnum:]
jest przybliżona\w
, ale nie pasuje do podkreślenia (_
).Tak więc kolekcję, którą chciałeś, można zapisać jako
[[:blank:][:alnum:]_]
lub[[:space:][:alnum:]_]
.Nie zweryfikowano testując to, ale to jest udokumentowane
:h regexp
,:h /character-classes
oraz:h /collection
.Uwaga dotycząca przenośności: w innych silnikach wyrażeń regularnych
\s
jest zwykle taki sam, jak[:space:]
(lub\_s
) w Vimie.źródło