Powershell简单的正则表达式捕获组无法捕获

时间:2015-10-21 14:57:46

标签: regex powershell

我在powershell中使用这个简单的正则表达式来解决最难的问题。我想捕获这个简单匹配表达式的(\d+)组:

$myvar = ([regex]'<element attr="(\d+)">').Matches('<element attr="1">')

问题在于,无论我尝试什么,$myvar[1]都没有定义。

当我在sublime text替换工具中运行此正则表达式时,它会正确捕获组。

这个简单的脚本出了什么问题?

2 个答案:

答案 0 :(得分:3)

$myvar是Match对象的集合。只有一个匹配,因此$myvar[0]是第一个匹配对象。

从那里,您可以访问.Captures.Groups来获取您的捕获群。

这将是$myvar[0].Captures[0].Value$myvar[0].Groups[1].Value,具体取决于您希望如何引用它。

答案 1 :(得分:3)

除非您想在替代品中使用回调,否则我建议您使用Select-String-match operator代替regex对象。

PS> $m = '<element attr="1">' | Select-String '<element attr="(\d+)">'
PS> $m.Matches[0].Groups[1].Value
1
PS> '<element attr="1">' -match '<element attr="(\d+)">'
True
PS> $matches[1]
1