web-dev-qa-db-fra.com

Inverser les caractères dans une expression régulière

Comment pourrais-je écrire une expression régulière qui correspond aux critères suivants?

  • Pas de chiffres
  • Pas de caractères spéciaux
  • Sans espaces

dans une ficelle

25
nimi

Le caret à l'intérieur d'une classe de caractères [^] est l'opérateur de négation commun à la plupart des implémentations d'expressions régulières (Perl, .NET, Ruby, Javascript, etc.). Alors je le ferais comme ça:

[^\W\s\d]
  • ^ - Correspond à rien dans la classe de caractères
  • \ W - correspond aux caractères non-Word (un caractère Word serait défini comme a-z, A-Z, 0-9 et trait de soulignement).
  • \ s - correspond aux espaces (espace, tabulation, retour à la ligne, saut de ligne)
  • \ d - correspond à 0-9

Ou vous pouvez adopter une autre approche en n'incluant que ce que vous voulez:

[A-Za-z]

La principale différence ici est que le premier inclura des traits de soulignement. Cela, et cela montre une façon d’écrire l’expression dans les mêmes termes que vous pensez. Mais si vous inversez, vous envisagez d'inclure des caractères au lieu de les exclure, il peut parfois en résulter une expression régulière plus facile à lire. 

Je ne sais pas exactement quels caractères spéciaux vous ne voulez pas. Mais j’ai écrit les deux solutions au cas où l’une te fonctionnerait mieux que l’autre.

61
Steve Wortham

En Perl, ce serait quelque chose comme:

$string !~ /[\d \W]/

Bien sûr, cela dépend de votre définition de "caractères spéciaux". \W correspond à tous les caractères non-Word. Un caractère Word est un caractère alphanumérique plus le caractère espace.

2
Thomas Owens

La chose la plus importante à propos des expressions régulières n’est pas leur syntaxe, mais leur capacité à expliquer clairement ce que vous recherchez. C'est vraiment 90% du problème.
En outre, il est généralement préférable d'indiquer ce que vous voulez plutôt que ce que vous ne voulez pas.

1
Matteo Riva

Essayez ^ [^ 0-9\p {P}] $

0
Paul McLean