正则表达式匹配批处理脚本中的变量

Nic*_*han 15 regex batch-file

@echo off

SET /p var=Enter: 
echo %var% | findstr /r "^[a-z]{2,3}$">nul 2>&1
if errorlevel 1 (echo does not contain) else (echo contains)
pause
Run Code Online (Sandbox Code Playgroud)

我正在尝试验证一个应包含2或3个字母的输入.但我尝试了所有可能的答案,它只运行if error level 1 (echo does not contain).

有谁可以帮助我吗.非常感谢.

Ste*_*han 10

findstr没有完整的REGEX支持.特别是没有{Count}.您必须使用变通方法:

echo %var%|findstr /r "^[a-z][a-z]$ ^[a-z][a-z][a-z]$"
Run Code Online (Sandbox Code Playgroud)

搜索^[a-z][a-z]$OR^[a-z][a-z][a-z]$

(注意:%var%和之间没有空格|- 它将成为字符串的一部分)


Ste*_*uan 5

既然其他答案都不反对findstr,跑起来cscript怎么样?这允许我们使用合适的 Javascript 正则表达式引擎。

@echo off
SET /p var=Enter: 
cscript //nologo match.js "^[a-z]{2,3}$" "%var%"
if errorlevel 1 (echo does not contain) else (echo contains)
pause
Run Code Online (Sandbox Code Playgroud)

其中match.js定义为:

if (WScript.Arguments.Count() !== 2) {
  WScript.Echo("Syntax: match.js regex string");
  WScript.Quit(1);
}
var rx = new RegExp(WScript.Arguments(0), "i");
var str = WScript.Arguments(1);
WScript.Quit(str.match(rx) ? 0 : 1);
Run Code Online (Sandbox Code Playgroud)