是否可以将捕获的组从 Powershell 正则表达式分配给没有 IF 块的变量?

Is it possible to assign a captured group from a Powershell regex to a variable without an IF block?

我有这个代码:

$text = "blah blah blah, yada yada yada, foobar"
If ($text -match '^.*(?<found>foobar).*$') {
    $foundtext = $Matches.found
}
$foundtext

但我想知道如何做与此等效的事情:

$text = "blah blah blah, yada yada yada, foobar"
$foundtext = ($text -match '^.*(?<found>foobar).*$').found
$foundtext

也就是说,我想知道是否可以将捕获的组从正则表达式直接分配给一个变量,而不必将其包装在 IF 语句中。问题是 $text -match '^.*(?<found>foobar).*$' 正则表达式匹配代码计算为 $True$False.

更通俗地说,我希望代码说“设置变量 $foundtext 等于表达式 ($text -match '^.*(?<found>foobar).*$') 中名为 found 的捕获组"

这可能吗? 是吗,正确的语法是什么?

正如已经评论过的,您可以使用$Matches来获取值。

如果你想在一行代码中得到匹配的值,你也可以这样做:

$text = "blah blah blah, yada yada yada, foobar"

# using the capture groups index:
$foundtext = ([regex]'(?i)^.*(?<found>foobar).*$').Match($text).Groups[1].Value

# or by the capture group's Name:
$foundtext = ([regex]'(?i)^.*(?<found>foobar).*$').Match($text).Groups['found'].Value

(?i) 使正则表达式不区分大小写,如 -match