是否可以将捕获的组从 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
我有这个代码:
$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