Regex 如何获取多个正则表达式匹配捕获组

Regex 如何获取多个正则表达式匹配捕获组,regex,powershell,Regex,Powershell,我正在尝试访问数组中我的第一个捕获组([^]+)的所有匹配项,以便我可以foreach它,但是我在输出中没有看到它: $input = "Row 1: Computer: xxx Last Heartbeat: 4/9/2020 11:27:24 AM Row 2: Computer: yyy Last Heartbeat: 4/9/2020 11:27:37 AM" $matches = ([regex]'Computer: ([^ ]+)').Matches($input) $match

我正在尝试访问数组中我的第一个捕获组
([^]+)
的所有匹配项,以便我可以
foreach
它,但是我在输出中没有看到它:

$input = "Row 1:
Computer: xxx
Last Heartbeat: 4/9/2020 11:27:24 AM

Row 2:
Computer: yyy
Last Heartbeat: 4/9/2020 11:27:37 AM"

$matches = ([regex]'Computer: ([^ ]+)').Matches($input)
$matches
收益率:

Groups   : {0, 1}
Success  : True
Name     : 0
Captures : {0}
Index    : 7
Length   : 13
Value    : Computer: xxx

Groups   : {0, 1}
Success  : True
Name     : 0
Captures : {0}
Index    : 66
Length   : 13
Value    : Computer: yyy

当然,对于数据结构和如何访问它们,我还有很多要学习的。

< P>在我们得到真正答案之前,请考虑重新命名变量--<代码> $匹配< /COD>和<代码> $输入<代码> >


为了获取第一个捕获组的值,您需要在
属性中寻址索引1,或在每个匹配的
捕获
属性中寻址索引0:

$string=“第1行:
计算机:xxx
最后心跳:2020年4月9日上午11:27:24
第2行:
计算机:yyy
最后心跳:2020年4月9日11:27:37“上午”
$results=([regex]'Computer:([^]+))。匹配($string)
$results | ForEach对象{$\.Groups[1].Value}
#或
$results | ForEach对象{$\.Captures[0].Value}

$input
是一个枚举器,用于访问您拥有的管道。以不同的方式命名变量。另外,我认为您需要
计算机:\s*(\s+)
模式。@WiktorStribiżew:我认为这不重要,但似乎
[^]
匹配
\n
\r
或PS中的组合?在VSCODE cmd提示符下工作,但不是PS ISE。PCRE中的不同?VScode使用了最新ECMAScript 2018正则表达式的奇怪修改,通常的模式在那里可能会有不同的工作方式<代码>[^]匹配除常规空格外的任何字符。所以,它与CR、LF等匹配,谢谢。有没有办法查看my
$matches
的结构,或者MS文档是唯一的方法?就像PHP中的
var|u dump
$var | ConvertTo Json
将为您提供一些方法(请注意
MatchInfo
Regex.Matches
返回的数据结构具有循环引用)
$var |格式列表*-Force
将为您提供所有一级属性(无论默认格式如何),而
$var | Get Member
将显示
$var
中每个项目上可用的属性和方法