W Perlu \S
dopasowuje każdy znak niebędący białą spacją.
Jak mogę dopasować dowolny znak niebędący białymi znakami z wyjątkiem odwrotnego ukośnika \
?
Możesz użyć klasy postaci :
/[^\s\\]/
dopasowuje wszystko, co nie jest białym znakiem ani znakiem \
. Oto kolejny przykład:
[abc]
oznacza „meczu a
, b
albo c
”; [^abc]
oznacza „dowolny znak z wyjątkiem a
, b
albo c
”.
^
interpretowane jako negacja, a kiedy jako początek linii? W związku z tym, dlaczego nie pasuje do linii zaczynającej się od liczby białych spacji$0~/\s*^\s/
$0~/\s*^\s/
po których następuje dowolny znak, który nie jest białymi spacjami/^\s+/
- początek wiersza, po którym następuje jeden lub więcej białych znaków.g
modyfikator./[^\s\\]/g
Możesz użyć lookahead:
źródło
/(?=\S)\W/
THIS IS A TEST, AND AGAIN
. : . Poniższe działały dobrze dla mnie(?=\S)[^"]*
.To zadziałało dla mnie przy użyciu sed [ Edytuj: komentarz poniżej wskazuje, że sed nie obsługuje \ s]
podczas
nie
źródło
\s
dopasowuje więcej niż tylko znak spacji. Obejmuje TAB, wysuw powrót karetki i inne (jak wiele innych w zależności od smaku regex). To wynalazek Perla, pierwotnie skrót klasy znaków POSIX[:space:]
i nie jest obsługiwany wsed
. Twoje pierwsze wyrażenie regularne powyżej powinno mieć postaćs/[^[:space:]g]//g
.echo "ghai ghai" | sed "s/[^[:space:]g]//g"
:g g
W moim systemie: CentOS 5
Mogę używać
\s
poza kolekcjami, ale muszę używać[:space:]
wewnątrz kolekcji. W rzeczywistości mogę używać[:space:]
tylko wewnątrz kolekcji. Więc aby dopasować pojedynczą spację używając tego, muszę użyć[[:space:]]
Co jest naprawdę dziwne.\s
[[:space:]]
[^[:space:]]
Te dwa nie będą działać:
źródło
([^[:space:]])
zamiast([^\s])
. Jestem na openSUSE Tumbleweed 2018 04 03.