我在数组中使用制表符分隔数据并应用如下所示的正则表达式匹配,我可以根据需要获取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
为单个匹配返回两个相同值的原因。我试着找一个相关的答案,但却找不到一篇文章来解释这个问题。有人可以就正在发生的事情提出建议吗?
答案 0 :(得分:2)
在$matches[0]
中,您会找到完整匹配
在$matches[1]
中,您可以找到第一个capturing group的内容。
==&GT;您不需要在整个模式周围使用捕获组,因此只需删除括号
即可'(?<=").*(?=")'