Windows findstr中的正则表达式

Windows findstr中的正则表达式,windows,regex,command-line,findstr,Windows,Regex,Command Line,Findstr,我正在使用findstr及其/r标志进行一点字符串验证,以允许正则表达式。我特别想验证整数 正则表达式 ^[0-9][0-9]*$ 对于非负数很好,但因为我现在也支持负数,所以我尝试了 ^([1-9][0-9]*|0|-[1-9][0-9]*)$ 对于正整数、负整数或零 正则表达式在理论上运行良好。我在PowerShell中测试了它,它符合我的要求。但是, findstr /r /c:"^([1-9][0-9]*|0|-[1-9][0-9]*)$" 没有 虽然我知道findstr没有最高级

我正在使用
findstr
及其
/r
标志进行一点字符串验证,以允许正则表达式。我特别想验证整数

正则表达式

^[0-9][0-9]*$
对于非负数很好,但因为我现在也支持负数,所以我尝试了

^([1-9][0-9]*|0|-[1-9][0-9]*)$
对于正整数、负整数或零

正则表达式在理论上运行良好。我在PowerShell中测试了它,它符合我的要求。但是,

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

虽然我知道
findstr
没有最高级的regex支持(甚至低于Notepad++,这可能是一个相当大的成就),但我希望这样简单的表达式能够工作

你知道我做错了什么吗?

啊,我应该读得更好
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=
或者,如果可以,下载。比
findstr
提供的功能多得多。

这对我来说很有用:

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

如果不使用
/c
选项,
参数将被视为一个以空格分隔的搜索字符串列表,这使得空格有点像是对
构造的粗略替换。(也就是说,只要正则表达式不包含空格。)

一个更简单的
regex
也可以实现同样的效果,只需在原始表达式的开头添加一个可选的减号即可:

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

对该项目的支持相当有限。我建议使用。“在文件中查找”选项支持与Perl兼容的正则表达式;显示文件名、行号和匹配文本的结果可以轻松复制到文本文件中

这里没有选择。这是一个纯批处理bignum库。当我完成基本的算术运算后,我会选择一个合适的解析器。对于正确的错误消息,这也会更好。目前,多个
findstr
调用就足够了。另外,如果只是为了功能,我会叫PowerShell。更简单、更强大。我很着迷,我知道任何人都希望bat文件中有bignums。编辑注意:windows标记有点多余,因为
findstr
只存在于那里……Rössel:标记用于帮助查找东西。在这种情况下,适度的冗余并没有什么坏处。我从来没有搜索过像windows这样拥挤的标签;-)但是如果你认为这会有帮助的话……别忘了使用标签过滤问题。那些过度拥挤的标签,如windows、linux、apple,很容易忽略啊,没错。那个我忘了。是的,RE中的空格可能不好,但这不是问题。我不愿意投票支持这种滥用正则表达式语法的行为,但你解决了我的问题,谢谢!:-Alan Moore建议的pAs,如果您的搜索字符串不包含空格,如果您所做的只是希望输出包含字符串列表的任何行,那么空格字符的工作方式将类似于|在“正则”正则表达式中:),smartexpert:您可能已经注意到Alan的答案是可以接受的。对于非交互式脚本,Notepad++并不是一个真正有用的选项。