findstr Windows命令的正则expression式

有没有办法在字母之间连续search两个或多个空格,使用Windows命令行中的findstr

例:

 Hello world! - nomatch wanted Hello world! - match wanted 

什么是正则expression式语法?

另外,你能帮我理解下面的命令行会话(区别[ ][ ]* ;第二个命令不返回任何内容):

 c:\1>findstr -i -r "view[ ]*data.sub" "view data sub.acf" View Data Sub.ACF: "].DATE_STAMP)>=[Forms]![MainNav]![View Data Sub]" View Data Sub.ACF: "].DATE_STAMP)<[Forms]![MainNav]![View Data Sub]" c:\1>findstr -i -r "view[ ]data.sub" "view data sub.acf" c:\1> 

PS:只是好奇; 我知道awk,Perl,C#等,但是怎么样findstr

如果你只是想找到两个连续的空间:

 findstr /C:" " input.txt 

或者在不区分大小写的正则表达式中:

 findstr /R /I /C:"lo wo" input.txt 

重要的是/C:在模式前面。 这告诉findstr将模式作为一个字符串处理。 没有它,发现将模式分割成多个模式。 根据我的经验,这绝不是你想要的。

更新

在字母之间做两个或多个空格:

 findstr /R /I /C:"[az] *[az]" input.txt 

请注意,模式中有三个空格。 这匹配一个字母,两个空格后跟零个或多个空格(即两个或更多个空格)和另一个字母。

要在字母之间找到两个或更多个连续的空格:

 C:\Users\harry> findstr /i /r /c:"o [ ]*w" test.txt Hello world! Hello world! 

翻译:包含'o',两个空格,零个或多个空格的匹配行,'w'。 (方括号是多余的,但增加清晰度。)据推测,你已经知道findstr /? 会给你一个正则表达式语法的总结?

至于你的问题的第二部分:正如arx已经指出的,你没有得到你期望的结果的原因是你没有使用/ C标志。 考虑你的第一个命令:

 findstr -i -r "view[ ]*data.sub" "view data sub.acf" 

这被解释为搜索匹配两个正则表达式之一的任何行, view[]*data.sub 。 我已经做了一些实验,我相信第一个正则表达式要么被丢弃为不正确的形式,要么被解释为需要从一组空白字符匹配。 第二个正则表达式解释如下:']','data',一个任意字符'sub'中的零个或多个。 碰巧,这恰好与您认为正在使用的单个正则表达式匹配。 当你拿走星号时不是这样的:

 findstr -i -r "view[ ]data.sub" "view data sub.acf" 

现在,第二个正则表达式被解释如下:一个']','数据',一个任意字符'sub'。 由于字符串']数据不会出现在您的文本中,所有行都不匹配。 相反,你应该指定/ c:

 findstr /i /r /c:"view[ ]data.sub" "view data sub.acf" 

现在你正在寻找一个正则表达式:'view',一个空格,'data',一个任意的字符'sub'。 这大概是你想要做的。