regex - 在 Powershell -match 中,可以重用 $Matches 吗?
问题描述
我正在尝试从字符串中读取多个值。关键字可能出现在字符串中的任何位置。我想要“价值”或直接跟随它的内容。
$str = 'Some version v1.2.3.4 (xyz) AnotherVal RandomKeyword: ValX'
我试过了
$test = $str -match 'Some version .*'
$val1 = $Matches[0] -replace 'Some version',''
Write-Host $val1 #gets the remainder of the string
$test2 = $val1 -match '\) '
Write-Host $Matches[0] #doesn't get the string following
有什么方法$Matches
必须重置吗?也许有更好的模式匹配方法?
解决方案
您似乎想要的是捕获组。如果是这样的话,那么这似乎可以完成这项工作。[咧嘴笑]
$InStuff = 'Some version v1.2.3.4 (xyz) AnotherVal'
$InStuff -match '^.+ version (.+) \(.+\) (.+)$'
$Matches
输出 ...
Name Value
---- -----
2 AnotherVal
1 v1.2.3.4
0 Some version v1.2.3.4 (xyz) AnotherVal
您可以使用匹配的索引号到达不同的捕获组。如果信息类型已知,您可以使用命名的捕获组。
推荐阅读
- javascript - 是的,日期验证没有按预期工作
- c# - 如何使用 C# 计算 xy 轴上的时钟角?
- css - 如何隐藏 mat-checkbox 不确定状态图标并改用背景颜色?
- javascript - UnitTest 抛出 TypeError:componentFactory.create 不是函数
- excel - 如何将表格转换为新行并将多列合并为一?
- reactjs - TypeScript React,导出样式化组件函数
- r - 带对数变量的曲线()函数
- c - 接收到的 IP 数据包标头与wireshark 不同
- wordpress - 如何从分类档案(例如“sprint”)中的常见帖子类型中实现另一个分类(例如“票证状态”)的过滤?
- python - 尝试使用 python 脚本解压缩损坏的 zip 文件时出错