Windows Cmd findstr - 数字不工作的正则表达式

马诺哈尔

我正在尝试验证传递给批处理文件的 IP 地址参数是否有效。不幸的是,尽管输入的正则表达式匹配,Windows findstr 并不能可靠地工作。

以下是所有结果的总结。

findstr 将 errorlevel 设置为 0 如果有匹配,如果没有匹配则设置为 1。

C:\iSTEP\VMTicketing\RealVNC>echo 192.10.10.10 | findstr /R "[0-2][0-9][0-9]\.[0-2][0-9][0-9]\.[0-2][0-9][0-9]\.[0-2][0-9][0-9]"

C:\iSTEP\VMTicketing\RealVNC>echo %errorlevel%
1

C:\iSTEP\VMTicketing\RealVNC>echo 192.101.101.101 | findstr /R "[0-2][0-9][0-9]\.[0-2][0-9][0-9]\.[0-2][0-9][0-9]\.[0-2][0-9][0-9]"
192.101.101.101

C:\iSTEP\VMTicketing\RealVNC>echo %errorlevel%
0

C:\iSTEP\VMTicketing\RealVNC>echo 1.1.1.1 | findstr /R "[0-2][0-9][0-9]?\.[0-2]?[0-9][0-9]?\.[0-2]?[0-9][0-9]?\.[0-2]?[0-9][0-9]?"

C:\iSTEP\VMTicketing\RealVNC>echo 1.1.1.1 | findstr /R "[0-2]?[0-9][0-9]?\.[0-2]?[0-9][0-9]?\.[0-2]?[0-9][0-9]?\.[0-2]?[0-9][0-9]?"

C:\iSTEP\VMTicketing\RealVNC>echo 1.1.1.1 | findstr /R "\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}"

C:\iSTEP\VMTicketing\RealVNC>echo %errorlevel%
1

C:\iSTEP\VMTicketing\RealVNC>echo 1.1.1.1 | findstr /b /e /R "\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}"

C:\iSTEP\VMTicketing\RealVNC>echo %errorlevel%
1

C:\iSTEP\VMTicketing\RealVNC>echo 1.1.1.1 | findstr /b /e /R "\b\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\b"

C:\iSTEP\VMTicketing\RealVNC>echo %errorlevel%
1

C:\iSTEP\VMTicketing\RealVNC>echo 1.1.1.1 | findstr /b /e /R "\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}"

C:\iSTEP\VMTicketing\RealVNC>echo %errorlevel%
1

C:\iSTEP\VMTicketing\RealVNC>echo 1.1.1.1 | findstr /b /e /R "*\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}*"
FINDSTR: No search strings

C:\iSTEP\VMTicketing\RealVNC>echo 1.1.1.1 | findstr /b /e /R "*\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}"
FINDSTR: No search strings

C:\iSTEP\VMTicketing\RealVNC>echo 1.1.1.1 | findstr /b /e /R "\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}*"

C:\iSTEP\VMTicketing\RealVNC>echo %errorlevel%
1

C:\iSTEP\VMTicketing\RealVNC>echo 1.1.1.1 | findstr /b /e /R "\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\>"

C:\iSTEP\VMTicketing\RealVNC>echo %errorlevel%
1

命令输出

T3RR0R

使用 powershell regex 执行匹配的简单方法:

@Echo off
 Call :Regex "131.21.1.101" "\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}"
 Echo(%Errorlevel%
 Call :Regex "1321.101" "\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}"
 Echo(%Errorlevel%
Goto :Eof

:Regex
 powershell.exe -noprofile -c "'%~1' -match '%~2'" | findstr /l "True" > nul || Exit /b 1
Exit /b 0

有关 powershell 正则表达式语法的详细信息,请参见此处

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何正确地将正则表达式编写为cmd的findstr?

如果文件夹名称与正则表达式匹配,则使用Cmd findstr

使用正则表达式的FindStr

FOR循环中Windows cmd中sed的转义正则表达式字符串

在Windows CMD(PowerShell)中使用正则表达式从XML中删除CDATA

Findstr:带有变量的正则表达式

Windows CMD:如何将正在运行的程序输出传递给FINDSTR并写入文件

使用Windows findstr列出不包含字符串的文件

如何在findstr实用程序中使用单词边界正则表达式

Findstr-仅返回正则表达式匹配项

FINDSTR中的正则表达式和文字表达式有什么区别?

如何在 Windows CMD 中使用正则表达式过滤 schtasks 输出以返回包含“计划类型:每日”的结果块?

使用Windows CMD findstr来匹配两个单词并用一个或多个空格分隔的行

CMD:FINDSTR:无法打开文件名

CMD中的FINDSTR-仅全字

无法使表达式针对grep或findstr

为什么Windows上的git commit-msg与正则表达式不匹配

正则表达式与Windows上的文本不匹配,在Mac上可以正常工作

Windows批处理文件正则表达式

Windows文件路径的Java正则表达式

批处理Windows中的正则表达式

如何设置Windows路径正则表达式模式?

正则表达式替换Windows换行符

正则表达式Windows路径验证器

Windows等效于UNIX正则表达式

正则表达式确定Windows UPN

Windows和Mac上的正则表达式

Python Windows路径正则表达式

正则表达式修剪 Windows 文件路径