Регулярные выражения в findstr

Я делаю немного строковой проверки с findstr и /r флаг для обеспечения регулярных выражений. В особенности я хотел бы проверить целые числа.

regex

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

хорошо работавший для неотрицательных чисел, но так как я теперь поддерживаю отрицательные числа также, я попробовал

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

или для положительных или для отрицательных целых чисел или нуля.

regex хорошо работает теоретически. Я протестировал его в PowerShell, и это соответствует тому, что я хочу. Однако с

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

это не делает.

В то время как я знаю это findstr не имеет самой усовершенствованной поддержки regex (даже ниже Блокнота ++, который является, вероятно, настоящим успехом), я ожидал бы, что такие простые выражения будут работать.

Какие-либо идеи, что я делаю неправильно здесь?

32
задан jfs 10 April 2010 в 20:19
поделиться

3 ответа

Это работает для меня:

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

Если вы не используете параметр / c , параметр аргумент обрабатывается как разделенный пробелами список строк поиска, что делает пробел своего рода грубой заменой конструкции | . (Пока ваши регулярные выражения не содержат пробелов.)

48
ответ дан 27 November 2019 в 20:34
поделиться

Ага, мне следовало бы прочитать документацию лучше. findstr очевидно не поддерживает чередования ( | ).

Так что я, вероятно, вернусь к многократным вызовам или заменю все это на собственный синтаксический анализатор.

Вот что я сейчас делаю:

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
ответ дан 27 November 2019 в 20:34
поделиться

Или, если есть возможность, скачайте grep для windows. . Гораздо больше возможностей, чем предоставляет findstr.

3
ответ дан 27 November 2019 в 20:34
поделиться
Другие вопросы по тегам:

Похожие вопросы: