Regex PowerShell中的正则表达式比较返回两个匹配项,而不是一个匹配项

Regex PowerShell中的正则表达式比较返回两个匹配项,而不是一个匹配项,regex,powershell,Regex,Powershell,我在数组中有以制表符分隔的数据,并应用如下所示的正则表达式匹配,我能够根据需要获得id值 但是,$matches变量返回两个值,它们是相同的值 $data = @( 'name1 "1001" role1', 'name2 "1002" role2' ) foreach($d in $data) { $d -match '(?<=")(.*)(?=")' | out-null #search for id i

我在数组中有以制表符分隔的数据,并应用如下所示的正则表达式匹配,我能够根据需要获得id值

但是,
$matches
变量返回两个值,它们是相同的值

$data = @(
            'name1  "1001"  role1',
            'name2  "1002"  role2'
        )

foreach($d in $data)
{
    $d -match '(?<=")(.*)(?=")' | out-null #search for id in quotes
    $id = $matches[0]
    #...  
}
我是一个regex初学者。我从这里获得了要应用的正则表达式字符串()


因此,我要么需要调整我的正则表达式逻辑,要么就是因为有一个原因,
$matches
为单个匹配返回两个相同的值。我试图寻找一个相关的答案,但没有找到一篇文章来解释这一点。有人能告诉你发生了什么吗?

$matches[0]
中,你找到了完整的匹配项

$matches[1]
中可以找到第一个的内容

==>您不需要在整个模式周围建立一个捕获组,因此只需删除括号即可

'(?<=").*(?=")'

”(?啊哈!这是一个正则表达式调整!感谢您提供的参考链接。虽然我仍在努力了解捕获组是如何工作的,但我很高兴只看到了预期的1个匹配项。
'(?<=").*(?=")'