regex - 如何批量进行负正则表达式匹配?
问题描述
这一次,我无法为我之前的帖子创建 if 语句
我正在尝试检查该值是否采用这种形式:^\d\d\.\d$
大多数时候,它会的。但是,它有时不可用。
在其他脚本语言中,我可以管理它,但由于某些未知原因,我无法弄清楚如何批量处理。
所以,它应该是这样的:
if not findstr /R "^\d\d\.\d$" %newvalue%
set newvalue=
如果不是"^\d\d\.\d$"
,则设置为newvalue
空白。这只是在newvalue
找不到时才空白,因为它会给出随机结果。
有人可以帮帮我吗?做这个if
声明的最佳方法是什么?
提前致谢。
解决方案
LotPings发布的非常好的工作解决方案是:
Echo:%newvalue%|findstr "^[0-9][0-9]\.[0-9]$" >Nul 2>&1 &&(echo matched pattern)||(echo didn't match pattern)
我建议有点不同的单行解决方案:
echo:%newvalue%|%SystemRoot%\System32\findstr.exe /R "^[0123456789][0123456789]\.[0123456789]$" >nul && (echo matched pattern) || (echo didn't match pattern)
或者更易于阅读并适用于分配给环境变量的任何字符串值newvalue
:
setlocal EnableExtensions EnableDelayedExpansion
echo:!newvalue!| %SystemRoot%\System32\findstr.exe /R "^[0123456789][0123456789]\.[0123456789]$" >nul
if errorlevel 1 (
echo Value does not match the regular expression pattern.
) else (
echo Value matches the regular expression pattern.
)
endlocal
echo
在命令和分配给环境变量的字符串之间使用冒号newvalue
而不是空格,以避免命令ECHOnewvalue
在根本未定义的情况下输出命令回显的当前状态。
最后一个解决方案使用延迟扩展来避免带有ECHO和FINDSTR的命令行不起作用或执行与分配给变量的字符串newvalue
包含类似&<>|
.
重要的是没有空间留给重定向操作符|
,该操作符将命令ECHO的输出传递给命令FINDSTR作为输入,因为这个空格字符也将由命令ECHO输出,并且正则表达式 find 永远不会是正数。如上一个示例所示,空格权限|
无关紧要。
FINDSTR不支持\d
作为任何数字的表示。需要在方括号中的自定义字符类中指定要匹配的字符。FINDSTR与[0-9]
字符匹配0123456789¹²³
。必须使用[0123456789]
仅匹配0123456789
没有. 的字符¹²³
。
.
表示任何字符,除了点用反斜杠转义,在这种情况下它被解释为文字字符。
默认情况下, FINDSTR将搜索字符串"..."
解释为正则表达式字符串。但我认为,对于FINDSTR和每个读者来说,使用或使其 100% 清晰总是好的,搜索字符串应该如何解释为文字或正则表达式字符串。/L
/R
FINDSTR1
在搜索的输入字符流上没有正匹配并且0
至少有一个正匹配时退出。FINDSTR的退出代码可以如上所示进行评估,并使用 Windows 批处理文件在单行中详细描述多个命令。
FINDSTR对正匹配的输出不感兴趣,因此重定向到设备NUL以抑制它。
要了解使用的命令及其工作原理,请打开命令提示符窗口,在其中执行以下命令,并仔细阅读每个命令显示的所有帮助页面。
echo /?
endlocal /?
findstr /?
if /?
setlocal /?
另请参阅有关使用命令重定向运算符和 DosTips 论坛主题ECHO 的 Microsoft 文章。无法提供文本或空行 - 而是使用 ECHO/,因为使用:
afterecho
通常比从文件读取或用户输入的字符串的输出中留出空格更好。
推荐阅读
- aws-lambda - 从 AWS java SDK 调用 AWS Lambda 函数
- java - 对多个键具有相同值并可按单个键搜索的数据结构
- google-cloud-platform - 将 JSON 解析为 Dataflow 作业中的键值
- javascript - 简单传输在注入的 Web3 中不起作用
- go - 以最少的分配去垃圾收集器开销?
- java - 如何使用 JAVA/Node.js 在 TELEGRAM 中向没有机器人的组发送消息
- xml - Xslt 从具有 xml 元素路径作为名称并将其值作为值的 xml 创建属性文件
- python - 进行赋值时,定义的类变量列表中的所有元素都获得相同的值
- node.js - 如何异步多次调用相同的api但使用不同的参数 - 节点/快递
- javascript - 如何从 JavaScript 函数调用 Angular 4 方法?