REGEX:DOS FindStr命令没有反向类能力?

时间:2013-08-13 19:24:25

标签: regex windows

documentation表示FindStr处理反向类语法,例如查找与“X”不匹配的任何字符:

[^X]

但是一些简单的测试显示情况并非如此 - 至少在我的Windows 7 x64设置上没有。 Findstr将逆类符号'^'视为根本不存在。因此,它将上述正则表达式视为:

[X]

我想知道是否有人知道如何通过欺骗FindStr来识别'^'逆类符号?

是的我可以使用除FindStr之外的其他工具,但这通常是Windows安装程序上已安装的工具。

4 个答案:

答案 0 :(得分:1)

您是否将搜索表达式括在双引号中? IIRC一个不带引号的^将简单引用下一个字符,这听起来就像你报道的那样。

答案 1 :(得分:1)

^cmd.exe中的转义字符。你必须逃避它(类似于其他环境中的\)。旅行>

[^^X]

答案 2 :(得分:1)

这是一个有效的例子:

echo 123|findstr /R "[^0-9]"

找不到任何预期的结果。

同样没有引号不起作用。

答案 3 :(得分:0)

运行一些测试使 findstr 的行为更清晰。测试并未涵盖所有可能性,只是为了开始:

echo.123|findstr.exe /x /r "[^0]" 
echo.123|findstr.exe /x /r "[^0][0-9]" 
echo.123|findstr.exe /b /r "[^0][0-9]*" 
echo. 123|findstr.exe /b /r "[^0][0-9]*" 
echo.123a|findstr.exe /b /r "[^0][0-9]*" 
echo.123a|findstr.exe /r "^[^0][0-9]*" 
echo.123a|findstr.exe /r "^[0][0-9]*$" 
echo.123a|findstr.exe /r "[^0]$" 
echo.123a|findstr.exe /r "[^a]$" 
echo.123a|findstr.exe /e /r "[^a]" 
echo.123a|findstr.exe /b /r "[^a]" 

引号之间可以有多个正则表达式。 Findstr 将搜索这两个表达式(使用或关系)。