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?
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?
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 :
/\(\w\|\s\)
lub:
/\v(\s|\w)
(lub rozwiązanie zaproponowane przez Petera Lewerina ).
\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.
[[:space:][:alnum:]_]
może być użyty do przybliżenia kolekcji\s
i\w
.