为何PowerShell的$Matches哈希表自动变量未返回全部匹配结果?
PowerShell命名捕获组$Matches访问问题解析
核心原因
你混淆了命名捕获组和匿名捕获组在$Matches中的索引规则:
- 当使用命名捕获组(语法
(?<name>...))时,$Matches字典仅包含:- 键
0:整个正则匹配的完整内容 - 你定义的命名键(比如
domain、user)
- 键
- 数字索引(
1、2等)仅在使用匿名捕获组(语法(...),不带命名)时才会生成,对应匿名组的匹配结果。
你的代码问题分析
你的正则表达式was (?<domain>.+)\\(?<user>.+)用的是命名捕获组,所以$Matches里根本不存在1和2这两个键,自然访问时没有返回值。你预期的$Matches.1和$Matches.2对应的其实是命名组user和domain的内容,正确的访问方式是$Matches.user和$Matches.domain,这部分你已经用对了。
验证示例
如果要使用数字索引访问,需要把正则改成匿名捕获组:
$string = 'The last logged on user was A\v' $string -match 'was (.+)\\(.+)' # 使用匿名组 $Matches.1 # 返回 A $Matches.2 # 返回 v $Matches.0 # 返回 was A\v
内容的提问来源于stack exchange,提问作者nam
相关产品推荐
相关产品推荐

