【发布时间】:2020-05-13 15:26:28
【问题描述】:
我有以下 PowerShell 代码:
$input = 'ADM:Dev_ControllerStore_103:1:2'
$pattern = '^(?<UID>\S+)\:(?<DB>\S+)\:(?<AppId>\d+)(?:\:(?<LicNr>\d+))?$'
if ( $input -match $pattern ) {
$Matches
}
这给出了以下输出:
Name Value
---- -----
DB 1
AppId 2
UID ADM:Dev_ControllerStore_103
0 ADM:Dev_ControllerStore_103:1:2
虽然我希望这样:
Name Value
---- -----
DB 1
AppId 2
UID ADM:Dev_ControllerStore_103
LicNr 2
0 ADM:Dev_ControllerStore_103:1:2
即将LicNr 包含在输出中。
注意:我得到的输出是输入字符串的预期输出:'ADM:Dev_ControllerStore_103:1' ... 并且可以正常工作。
如果我更改正则表达式以使最后一个非捕获组非可选,或者我删除非捕获组对于较长的输入字符串都可以正常工作;但显然这些不适合只有 3 个值而不是 4 个值的版本。
我的理解是否遗漏了什么,或者这是 PowerShell 中的错误?
注意:我有一个解决方法 (~$a,$b,$c,$d = $input -split ':'),所以这个问题只是为了学术兴趣。
【问题讨论】:
-
你确定你会期望
AppIdANDLicNr是2输入ADM:Dev_ControllerStore_103:1:2?
标签: regex powershell powershell-5.0