Je fais une petite validation de chaîne avec findstr
et son drapeau /r
pour permettre les expressions régulières. En particulier, j'aimerais valider des entiers.
La regex
^[0-9][0-9]*$
a bien fonctionné pour les nombres non négatifs, mais depuis que je supporte maintenant les nombres négatifs, j'ai aussi essayé
^([1-9][0-9]*|0|-[1-9][0-9]*)$
pour les entiers positifs ou négatifs ou zéro.
La regex fonctionne bien théoriquement . Je l'ai testé dans PowerShell et il correspond à ce que je veux. Cependant, avec
findstr /r /c:"^([1-9][0-9]*|0|-[1-9][0-9]*)$"
ce n'est pas.
Bien que je sache que findstr
ne dispose pas du support regex le plus avancé (même en dessous de Notepad ++, ce qui est probablement un exploit), je m'attendais à ce que de telles expressions simples fonctionnent.
Des idées que je fais mal ici?
Cela fonctionne pour moi:
findstr /r "^[1-9][0-9]*$ ^-[1-9][0-9]*$ ^0$"
Si vous n'utilisez pas l'option /c
, l'argument <Strings>
est traité comme un list séparé par des chaînes de recherche, ce qui fait de l'espace une sorte de remplacement brut pour la construction |
. (Tant que vos regex ne contiennent pas d'espaces, c'est-à-dire.)
Argh, j'aurais dû lire la documentation mieux. findstr
ne prend apparemment pas en charge les alternatives (|
).
Je suis donc probablement revenu à plusieurs invocations ou à tout remplacer par un analyseur personnalisé.
C'est ce que je fais pour l'instant:
set ERROR=1
rem Test for zero
echo %1|findstr /r /c:"^0$">nul 2>&1
if not errorlevel 1 set ERROR=
rem Test for positive numbers
echo %1|findstr /r /c:"^[1-9][0-9]*$">nul 2>&1
if not errorlevel 1 set ERROR=
rem Test for negative numbers
echo %1|findstr /r /c:"^-[1-9][0-9]*$">nul 2>&1
if not errorlevel 1 set ERROR=
Ou si vous le pouvez, téléchargez grep pour Windows. . Beaucoup plus de fonctionnalités que findstr
fournit.
Une regex
plus simple réalisant la même chose est possible, ajoutez simplement un signe moins optionnel au début de votre expression d'origine:
^-?[0-9][0-9]*$