当我运行以下正则表达式匹配命令时,:
'abc123' -match '(\d+)|(\w+)|(abc123)|(25)'
或
[regex]::matches('abc123', '(\d+)|(\w+)|(abc123)|(25)')
我有办法提取匹配的子模式吗?在这种情况下,它将是第三个捕获块:' abc123'
答案 0 :(得分:1)
根据我的意识,您无法获得与您的字符串匹配的完全正则表达式部分,如果您使用智能构造函数进行正则表达式,您可以轻松地将其自动化。
$ToMatch = 'abc123FOO'
$PossibleMatches = @('\d+','\w+','abc123.+','25')
$JoinOn = ')|('
$Regex = "($($PossibleMatches -join $JoinOn))"
$CaughtGroup = [Regex]::Matches($ToMatch,$Regex).Groups | ? {$_.Success -and $_.Name -ne '0'}
$CaughtIndex = [int]$CaughtGroup.Name
$CaughtMatch = $PossibleMatches[$CaughtIndex]
"Matched Group $($CaughtIndex) '$($CaughtMatch)'"
会给你
Matched Group 2 'abc123.+'
如果这对你来说没有问题(即你的正则表达式各不相同等),你可能想要分解程序流程并尝试首先将它与一系列可能的数据进行匹配?