En Perl \S
correspond à tout caractère autre qu'un espace blanc.
Comment faire correspondre tout caractère autre qu'un espace blanc, à l'exception d'une barre oblique inversée ? \
?
En Perl \S
correspond à tout caractère autre qu'un espace blanc.
Comment faire correspondre tout caractère autre qu'un espace blanc, à l'exception d'une barre oblique inversée ? \
?
Vous pouvez utiliser un 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 "correspondre a
, b
o c
" ; [^abc]
signifie "correspondre à tout caractère sauf a
, b
o c
".
Quand est-ce que ^
interprété comme une négation et quand comme un début de ligne ? À cet égard, pourquoi ce système ne correspond-il pas à une ligne commençant par un certain nombre d'espaces blancs ? $0~/\s*^\s/
En dehors d'une classe de caractères, c'est le "début de la chaîne" (ou de la ligne, selon le mode de correspondance actuel). À l'intérieur d'une classe de caractères, et seulement si c'est le premier caractère après la parenthèse ouvrante, il annule le contenu de la classe de caractères.
Le texte suivant correspondra-t-il à une ligne qui commence par un certain nombre d'espaces blancs ? $0~/\s*^\s/
suivi de tout caractère qui n'est pas un espace blanc
On dirait que c'est en avant si ce n'est pas un espace. Et ensuite, la classe négative accepte tout ce qui n'est pas un espace, sauf les caractères de votre classe.
J'aime cette solution. C'est bien pour des choses comme "donnez-moi tous les caractères non-mots sauf les espaces" : /(?=\S)\W/
J'avais une situation où je devais faire correspondre tout caractère non blanc ainsi que les caractères non guillemets. Il fallait également tenir compte des ESPACES. Ex : THIS IS A TEST, AND AGAIN
. Ce qui suit a bien fonctionné pour moi (?=\S)[^"]*
.
\s
correspond à plus que le caractère espace. Il inclut le TAB, le saut de ligne, le retour de chariot, et d'autres (comment beaucoup de d'autres dépendent de la saveur de la regex). C'est une invention de Perl, à l'origine un raccourci pour la classe de caractères POSIX [:space:]
et non pris en charge dans sed
. Votre première expression rationnelle ci-dessus devrait être s/[^[:space:]g]//g
.
Sur mon système : CentOS 5
Je peux utiliser \s
en dehors des collections mais doivent utiliser [:space:]
à l'intérieur des collections. En fait, je peux utiliser [:space:]
uniquement à l'intérieur des collections. Ainsi, pour faire correspondre un espace unique en utilisant cette méthode, je dois utiliser [[:space:]]
Ce qui est vraiment étrange.
echo a b cX | sed -r "s/(a\sb[[:space:]]c[^[:space:]])/Result: \1/"
Result: a b cX
\s
[[:space:]]
[^[:space:]]
Ces deux-là ne fonctionneront pas :
a[:space:]b instead use a\sb or a[[:space:]]b
a[^\s]b instead use a[^[:space:]]b
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.