首页 > 解决方案 > 在 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必须重置吗?也许有更好的模式匹配方法?

标签: regexpowershellreplacepattern-matchingmatch

解决方案


您似乎想要的是捕获组。如果是这样的话,那么这似乎可以完成这项工作。[咧嘴笑]

$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

您可以使用匹配的索引号到达不同的捕获组。如果信息类型已知,您可以使用命名的捕获组。


推荐阅读