在findstr中的正则表达式

时间:2010-04-10 15:10:57

标签: 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没有最高级的正则表达式支持(甚至在Notepad ++之下,这可能是相当大的成就),但我希望这些简单的表达式可以工作。

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

5 个答案:

答案 0 :(得分:46)

这对我有用:

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

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

答案 1 :(得分:9)

唉,我应该更好地阅读the documentationfindstr显然不支持替换(|)。

所以我可能会回到多个调用或最终用自定义解析器替换整个事件。

这就是我现在所做的:

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=

答案 2 :(得分:3)

或者,如果可以,请下载grep for windows.。比findstr提供的功能更多。

答案 3 :(得分:1)

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

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

答案 4 :(得分:0)

regex in findstr的支持非常有限。我建议使用 Notepad++ 在文件中查找选项支持Perl兼容的正则表达式;显示文件名,行号和匹配文本的结果可以轻松复制到文本文件中。