|
|
|
function Get-NameRegex {
|
|
|
|
param(
|
|
|
|
$Str,
|
|
|
|
$Regex,
|
|
|
|
$Exclude,
|
|
|
|
[switch] $End
|
|
|
|
)
|
|
|
|
# 查詢 Regex 字串中定義的 TAG,並將其作為 Scriptblock
|
|
|
|
$Keyfind = {
|
|
|
|
process{
|
|
|
|
if ($_ -match "\(\?\<(.*?)\>") {
|
|
|
|
$Matches[1]
|
|
|
|
} else {
|
|
|
|
Write-Error "$_ 沒有定義(?<TAG>)"
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
# 將原函式轉為 Scriptblock,以方便 Exclude 功能遞迴呼叫
|
|
|
|
$InnerScrip = {
|
|
|
|
# 取用管線傳入的 hash 進行 match
|
|
|
|
process {
|
|
|
|
$Key = $_["Regex"] | &$Keyfind
|
|
|
|
if ($_["Target"] -match $_["Regex"]) {
|
|
|
|
$Result = @{
|
|
|
|
$Key = $Matches[$Key]
|
|
|
|
# 將錨定字串中的特殊字元轉換為一般字串
|
|
|
|
Anchor = $Matches[0] -replace "([\[\]\(\)])", '\$1'
|
|
|
|
}
|
|
|
|
$LR = $_["Target"] -split $Result["Anchor"]
|
|
|
|
$Result.Add("L", $LR[0])
|
|
|
|
$Result.Add("R", $LR[1])
|
|
|
|
# 對 Anchor 結果,以 $Exclude 進行比對,符合則加入剩餘字串重新 match
|
|
|
|
if ($Exclude -and($Result["Anchor"] -match $Exclude)) {
|
|
|
|
$Result.Add("Regex", $_["Regex"])
|
|
|
|
$Result.Add("Target", $Result["L"])
|
|
|
|
return $Result | &$InnerScrip
|
|
|
|
}
|
|
|
|
# 結尾模式,僅輸出符合 TAGKEY 的 hash
|
|
|
|
if ($End) { return @{ $Key = $Result[$Key] } } else { return $Result }
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
#Write-Host $Str
|
|
|
|
# Regex 可輸入複數個
|
|
|
|
$Regex | % { @{ Target = $Str; Regex = $_; } } | &$InnerScrip
|
|
|
|
}
|
|
|
|
|
|
|
|
# Example
|
|
|
|
# $RS1 | % { Get-NameRegex $_["L"] -Regex $NameRegex -Exclude "(BD|DVD|HDTV)RIP" -End }
|
|
|
|
# $TestName | % { Get-NameRegex $_ -Regex $Regex } | % { $(Get-NameRegex $_["L"] -Regex $NameRegex -Exclude "(BD|DVD|HDTV)RIP" -End) + $_ }
|
|
|
|
# SIG # Begin signature block
|
|
|
|
# MIIFxwYJKoZIhvcNAQcCoIIFuDCCBbQCAQExCzAJBgUrDgMCGgUAMGkGCisGAQQB
|
|
|
|
# gjcCAQSgWzBZMDQGCisGAQQBgjcCAR4wJgIDAQAABBAfzDtgWUsITrck0sYpfvNR
|
|
|
|
# AgEAAgEAAgEAAgEAAgEAMCEwCQYFKw4DAhoFAAQU2SfubhaWpugweGH+53eZ/igq
|
|
|
|
# VQOgggNSMIIDTjCCAjagAwIBAgIQdMnAQ4BDAo9Lgfn+QeDdhjANBgkqhkiG9w0B
|
|
|
|
# AQUFADAqMRMwEQYDVQQDDApOaWNrIENoYW5nMRMwEQYDVQQKDAplYXJpY2sub3Jn
|
|
|
|
# MB4XDTIxMTAzMTEwMDI1MVoXDTIyMTAzMTEwMjI1MVowMzEiMCAGCSqGSIb3DQEJ
|
|
|
|
# ARYTcGNuaWNrMTAwQGdtYWlsLmNvbTENMAsGA1UEAwwETmljazCCASIwDQYJKoZI
|
|
|
|
# hvcNAQEBBQADggEPADCCAQoCggEBAMEnEk3/5rkEMibDbbfOXQaerk5xXSJmY8gf
|
|
|
|
# FAVUbrGfjzYHcRsPRzdb/pstcZGS2XUCoX2a57lQhACStns9dXeYfWhzNeAiSEAy
|
|
|
|
# iaJzUj5ELcH5TzT+mjeJQX6upeHOexO1TmtuM6mugpl9SvNQFqbQXlPHHmoLE3OC
|
|
|
|
# UzzjEC0AkHkcSiLdqtmSbRmaomcDMbtJgZHUciWE/p6mmAbpv2R4rdKSYSiI8UsE
|
|
|
|
# UclzkeTNrYKmJNiM0R+X1LyZVY6HAHN8dR3tjBnEPYoPxRAz4d2FEajvumzosNUr
|
|
|
|
# ni9LROnRxQXa048ZcsNArNZDQXe+Rc+PWhzbqHhy8rBllgZ08XkCAwEAAaNnMGUw
|
|
|
|
# DgYDVR0PAQH/BAQDAgeAMBMGA1UdJQQMMAoGCCsGAQUFBwMDMB8GA1UdIwQYMBaA
|
|
|
|
# FBXyUrhn78ppKe7GRmHS6vbsNae/MB0GA1UdDgQWBBRs5+Yfb/14jwpjUNpTUuR1
|
|
|
|
# 759t9TANBgkqhkiG9w0BAQUFAAOCAQEACSL1BqUcrqh+bBqr5rQ5mArCVxsBW92r
|
|
|
|
# HenPY48dKdhGgMODtxuo7osZLk7Il+aXhAsvNTSfmc92H5eDXFqZ565jm8r6FF1C
|
|
|
|
# f1oKxznmtxd4oyXflCRqBz+OGuXLq8dG9gWT7OisKWe0hifSMGaZ9afpNeiFLuD1
|
|
|
|
# GSGk5E0W+bUyezCmjOdNWYIW452brt8rJS21WWVVvrsGjgJoTdsoAkFek8OEm82+
|
|
|
|
# 1UR7xZOHybLvi8N0gvD+UFlVvcv6pmgUqaz5DS7J2si75Xj9pThE6/bPu/fkpc53
|
|
|
|
# gMbleXNaqXIKeJTbI5hi2crlKyXBe/GfuK0Tv+06S1sL32VAs1VwmjGCAd8wggHb
|
|
|
|
# AgEBMD4wKjETMBEGA1UEAwwKTmljayBDaGFuZzETMBEGA1UECgwKZWFyaWNrLm9y
|
|
|
|
# ZwIQdMnAQ4BDAo9Lgfn+QeDdhjAJBgUrDgMCGgUAoHgwGAYKKwYBBAGCNwIBDDEK
|
|
|
|
# MAigAoAAoQKAADAZBgkqhkiG9w0BCQMxDAYKKwYBBAGCNwIBBDAcBgorBgEEAYI3
|
|
|
|
# AgELMQ4wDAYKKwYBBAGCNwIBFTAjBgkqhkiG9w0BCQQxFgQUoqQp8TNHQrFdDrpM
|
|
|
|
# 6+iDq3QvqIUwDQYJKoZIhvcNAQEBBQAEggEApo8NtKRWXRdAxdmJMSYorrOWC1ra
|
|
|
|
# NaN0N3UbhQKTAjbN3sYP4oZmOiEftQn5Ot0JztpYAb29Ge//R+0EGQR69IoGMgr0
|
|
|
|
# X5toFyWFle3ddKu3swsFv9dJI4vYSW1Pce13kBdp+2a7hCF/6kS1aYDLEdEYhcwq
|
|
|
|
# 8rqRSNtr73Ro00eMVSm72GRv709ouWK5jCqCPq6r/7O4UZvyiqyF4Oq8fZDAsWlK
|
|
|
|
# Tc5zLTtnaIysgvAZm7izn0oSD/kLx6hv7wGNp7yVSUkNq7a7qu34Brs5eQtZyblj
|
|
|
|
# JbZPtDYY0++t5xgHskpigkAVej3B1TkNg1rH1EJ49JX10yeIq7JEMS4u8Q==
|
|
|
|
# SIG # End signature block
|