代码之家  ›  专栏  ›  技术社区  ›  Joey

findstr中的正则表达式

  •  30
  • Joey  · 技术社区  · 14 年前

    我正在做一个字符串验证 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]*)$"
    

    没有。

    当我知道的时候 芬德斯特 没有最高级的regex支持(甚至低于notepad++这可能是一个相当大的成就),我希望这样的简单表达式可以工作。

    你知道我在这里做错什么吗?

    4 回复  |  直到 14 年前
        1
  •  45
  •   Alan Moore Chris Ballance    14 年前

    这对我很有用:

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

    如果你不使用 /c 选项,即 <Strings> 参数被视为空格分隔 列表 搜索字符串,这使得该空间成为 | 构造。(只要正则表达式不包含空格,也就是说。)

        2
  •  9
  •   Joey    14 年前

    啊,我应该读一下 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=
    
        3
  •  3
  •   ghostdog74    14 年前

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

        4
  •  1
  •   Mihriban Minaz Andy Davies    8 年前

    更简单的 regex 这样做同样可行,只需在原始表达式的开头添加一个可选的减号:

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