En Perl \S
correspond à n'importe quel caractère non blanc.
Comment puis-je faire correspondre n'importe quel caractère non blanc à l'exception d'une barre oblique inverse \
?
Vous pouvez utiliser une classe de caractères :
/[^\s\\]/
correspond à tout ce qui n'est pas un caractère d'espacement ni un \
. Voici un autre exemple:
[abc]
signifie "match a
, b
ou c
"; [^abc]
signifie "correspond à n'importe quel caractère sauf a
, b
ou c
".
^
interprété comme négation et quand comme début de ligne? À cet égard, pourquoi cela ne correspondra pas à une ligne commençant par un nombre d'espaces blancs$0~/\s*^\s/
$0~/\s*^\s/
suivie de tout caractère qui n'est pas un espace blanc/^\s+/
- au début de la ligne, suivi d'un ou plusieurs caractères d'espacement.g
modificateur./[^\s\\]/g
Vous pouvez utiliser une anticipation:
la source
/(?=\S)\W/
THIS IS A TEST, AND AGAIN
. Ce qui suit a bien fonctionné pour moi(?=\S)[^"]*
.Cela a fonctionné pour moi en utilisant sed [ Modifier: le commentaire ci-dessous indique que sed ne prend pas en charge \ s]
tandis que
n'a pas
la source
\s
correspond à plus que le caractère d'espace. Il inclut TAB, retour chariot de saut de ligne et autres (le nombre d' autres dépend de la saveur de l'expression régulière). C'est une invention Perl, à l'origine un raccourci pour la classe de caractères POSIX[:space:]
, et non prise en charge danssed
. Votre premier regex ci-dessus devrait êtres/[^[:space:]g]//g
.echo "ghai ghai" | sed "s/[^[:space:]g]//g"
Rendements:g g
Sur mon système: CentOS 5
Je peux utiliser en
\s
dehors des collections, mais je dois utiliser à l'[:space:]
intérieur des collections. En fait, je ne peux utiliser[:space:]
que des collections internes. Donc, pour faire correspondre un seul espace en utilisant cela, je dois utiliser[[:space:]]
ce qui est vraiment étrange.\s
[[:space:]]
[^[:space:]]
Ces deux ne fonctionneront pas:
la source
([^[:space:]])
place de([^\s])
. Je suis sur openSUSE Tumbleweed 2018 04 03.