it-swarm.com.de

Reguläre Ausdrücke in findstr

Ich mache eine kleine String-Validierung mit findstr und seinem /r-Flag, um reguläre Ausdrücke zu ermöglichen. Insbesondere möchte ich ganze Zahlen validieren.

Der Regex

^[0-9][0-9]*$

funktionierte gut für nicht negative Zahlen, aber da ich jetzt auch negative Zahlen unterstütze, habe ich es versucht

^([1-9][0-9]*|0|-[1-9][0-9]*)$

für positive oder negative ganze Zahlen oder Null.

Der Regex funktioniert gut theoretisch . Ich habe es in PowerShell getestet und es passt zu meinen Wünschen. Jedoch mit

findstr /r /c:"^([1-9][0-9]*|0|-[1-9][0-9]*)$"

es tut nicht.

Obwohl ich weiß, dass findstr nicht die am weitesten fortgeschrittene Unterstützung für reguläre Ausdrücke hat (selbst unter Notepad ++, was wahrscheinlich eine beachtliche Leistung ist), hätte ich erwartet, dass solche einfachen Ausdrücke funktionieren.

Irgendwelche Ideen, was ich hier falsch mache?

30
Joey

Das funktioniert für mich:

findstr /r "^[1-9][0-9]*$ ^-[1-9][0-9]*$ ^0$"

Wenn Sie die /c-Option nicht verwenden, wird das <Strings>-Argument als durch Leerzeichen getrennte list von Suchzeichenfolgen behandelt. Dies macht das Leerzeichen zu einer Art Rohersatz für das |-Konstrukt. (Das heißt, solange Ihre Regex keine Leerzeichen enthält.)

45
Alan Moore

Argh, ich hätte die Dokumentation besser lesen sollen. findstr unterstützt anscheinend keine Alternativen (|).

Also bin ich wahrscheinlich wieder bei mehreren Aufrufen oder ersetze das Ganze irgendwann durch einen benutzerdefinierten Parser.

Das mache ich jetzt:

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=
9
Joey

Oder, wenn möglich, grep für Windows herunterladen. . Viel mehr Funktionen als findstr bietet.

3
ghostdog74

Eine einfachere regex, die dasselbe erreicht, ist möglich. Fügen Sie einfach ein optionales Minuszeichen am Anfang Ihres ursprünglichen Ausdrucks hinzu:

^-?[0-9][0-9]*$
0
martski

Die Unterstützung für reguläre Ausdrücke in findstr ist sehr begrenzt. Ich schlage vor, Notepad ++ zu verwenden. Die Option In Dateien suchen unterstützt Perl-kompatible reguläre Ausdrücke. Ergebnisse mit Dateiname, Zeilennummer und passendem Text können problemlos in eine Textdatei kopiert werden.

0
Paulo Merson