1

文档说 FindStr 处理逆类语法,例如查找任何不匹配“X”的字符:

[^X]

但是一些简单的测试表明情况并非如此——至少在我的 Windows 7 x64 设置上不是这样。Findstr 将逆类符号 '^' 视为根本不存在。所以它认为上面的正则表达式是这样的:

[X]

我想知道是否有人知道一种方法来欺骗 FindStr 来识别 '^' 反类符号?

是的,我可以使用 FindStr 之外的其他工具,但这通常是已安装在 Windows 设置中的工具。

4

4 回答 4

2

是 中的^转义字符cmd.exe。您必须转义它(类似于\在其他环境中)。尝试:

[^^X]
于 2013-08-13T19:48:56.340 回答
1

您是否将搜索表达式括在双引号中?IIRC an unquoted^将简单地引用下一个字符,这听起来像您正在报告的内容。

于 2013-08-13T19:43:30.827 回答
1

这是一个有效的示例:

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

没有发现任何预期。

没有引号的相同是行不通的。

于 2013-08-13T19:55:40.577 回答
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 将搜索这两个表达式(使用或关系)。

于 2021-03-03T07:52:41.273 回答