41

我正在使用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++ 之下,这可能也是一项了不起的成就),但我希望这样简单的表达式能够工作。

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

4

5 回答 5

57

这对我有用:

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

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

于 2010-04-11T00:29:41.897 回答
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=
于 2010-04-10T15:13:39.607 回答
3

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

于 2010-04-10T15:19:56.787 回答
2

regex实现同样事情的更简单的方法是可能的,只需在原始表达式的开头添加一个可选的减号:

^-?[0-9][0-9]*$
于 2016-04-08T10:40:25.310 回答
1

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

于 2019-06-13T13:14:17.893 回答