我在powershell中使用这个简单的正则表达式来解决最难的问题。我想捕获这个简单匹配表达式的(\d+)
组:
$myvar = ([regex]'<element attr="(\d+)">').Matches('<element attr="1">')
问题在于,无论我尝试什么,$myvar[1]
都没有定义。
当我在sublime text替换工具中运行此正则表达式时,它会正确捕获组。
这个简单的脚本出了什么问题?
答案 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