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

时间:2014-05-08 09:22:50

标签: regex powershell

我在数组中使用制表符分隔数据并应用如下所示的正则表达式匹配,我可以根据需要获取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]
    #...  
}

当我检查$matches时,我得到2个相同的匹配而不是1 -

PS C:\> $matches

Name                           Value                                           
----                           -----                                           
1                              1002                                            
0                              1002

我是一名正则表达式初学者。我从这里获得了正则表达式字符串(Regex Match all characters between two strings)。

所以我要么调整我的正则表达式逻辑,要么$matches为单个匹配返回两个相同值的原因。我试着找一个相关的答案,但却找不到一篇文章来解释这个问题。有人可以就正在发生的事情提出建议吗?

1 个答案:

答案 0 :(得分:2)

$matches[0]中,您会找到完整匹配

$matches[1]中,您可以找到第一个capturing group的内容。

==&GT;您不需要在整个模式周围使用捕获组,因此只需删除括号

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