9
votes

Windows CMD Trouver de la mauvaise correspondance de Regex

Je dois vérifier si une chaîne contient quoi que ce soit, à l'exception du chiffre. Mais j'ai un problème. XXX

ne renvoie rien, mais il devrait renvoyer BDFBDFD. Mais

echo 123 | FindStr / R [^ 0123456789]

retourne '123'. Pourquoi? Il devrait travailler vice versa.


1 commentaires

Je ne peux pas obtenir cela pour travailler (sur XP). Le [^ ...] La classe de caractères négatif semble être simplement brisé. Je pensais que cela pourrait être une question de s'échapper ou de citer, mais ne pouvait trouver rien qui fonctionnerait.


3 Réponses :


3
votes

Le ^ code> est le caractère d'échappement de cmd.exe code>.

Vous devez vous échapper avec un autre: p> xxx Pré>

ou utilisez des guillemets autour du motif: p> xxx pré>

update strong>: En réalité, la partie suivante est fausse, comme vous cherchez "n'importe quoi sinon alors seulement des chiffres ". Ce qui suit ne fonctionnera pas pour les chaînes d'entrée comme "1x", qui contiennent évidemment quelque chose, sauf un chiffre. Donc, la meilleure solution est probablement d'utiliser ce que @gabber a suggéré, c'est-à-dire que c.-à-d. Débarrassez-vous de l'espace avant le tuyau. P>

   echo xxxx| findstr /R "[^0-9]"


0 commentaires

8
votes

Après beaucoup de tests, nous allons ici:

echo 123 | findstr /R [^0123456789]


1 commentaires

(Je pense que la motivation est dans la réponse de Christian K :))



0
votes

Peut-être que vous pouvez essayer cela lors de la capture de la chaîne dans une variable et des options sur ce à faire en cas de correspondance ou non:

echo.%Name% | findstr /R [^0-9]Nul && (
  echo There was a match in Name variable contents
) || (
  echo Match Not Found
)


0 commentaires