在findstr中的正则表达式

Joe*_*oey 32 regex windows command-line findstr

我正在做一个小字符串验证findstr和它的/r标志,以允许正则表达式.特别是我想验证整数.

正则表达式

^[0-9][0-9]*$
Run Code Online (Sandbox Code Playgroud)

对于非负数而言工作得很好但是因为我现在支持负数而且我试过了

^([1-9][0-9]*|0|-[1-9][0-9]*)$
Run Code Online (Sandbox Code Playgroud)

对于正整数或负整数或零.

正则表达式在理论上运行良好.我在PowerShell中测试了它,它符合我的要求.然而,随着

findstr /r /c:"^([1-9][0-9]*|0|-[1-9][0-9]*)$"
Run Code Online (Sandbox Code Playgroud)

它没有.

虽然我知道findstr没有最先进的正则表达式支持(甚至在Notepad ++之下,这可能是一项相当大的成就),但我希望这些简单的表达式可以工作.

我在这里做错了什么想法?

Ala*_*ore 48

这对我有用:

findstr /r "^[1-9][0-9]*$ ^-[1-9][0-9]*$ ^0$"
Run Code Online (Sandbox Code Playgroud)

如果不使用该/c选项,则该<Strings>参数将被视为以空格分隔的搜索字符串列表,这使得该空间成为|构造的一种粗略替代.(只要你的正则表达式不包含空格,那就是.)

  • 我不愿意这样滥用正则表达式语法,但你解决了我的问题,谢谢!:-P (2认同)

Joe*_*oey 9

唉,我应该更好地阅读文档.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=
Run Code Online (Sandbox Code Playgroud)