我正在使用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 ++之下,这可能是相当大的成就),但我希望这些简单的表达式可以工作。
我在这里做错了什么想法?
答案 0 :(得分:46)
这对我有用:
findstr /r "^[1-9][0-9]*$ ^-[1-9][0-9]*$ ^0$"
如果您不使用/c
选项,则<Strings>
参数将被视为搜索字符串的空格分隔的列表,这使得空间成为一种|
构造的粗略替代。 (只要你的正则表达式不包含空格,那就是。)
答案 1 :(得分:9)
唉,我应该更好地阅读the documentation。 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=
答案 2 :(得分:3)
或者,如果可以,请下载grep for windows.。比findstr
提供的功能更多。
答案 3 :(得分:1)
可以实现相同的更简单的regex
,只需在原始表达式的开头添加一个可选的减号:
^-?[0-9][0-9]*$
答案 4 :(得分:0)
对regex in findstr的支持非常有限。我建议使用 Notepad++ 。 在文件中查找选项支持Perl兼容的正则表达式;显示文件名,行号和匹配文本的结果可以轻松复制到文本文件中。