3 changed files with 107 additions and 57 deletions
			
			
		
									
										Binary file not shown.
									
								
							
						| @ -0,0 +1,85 @@ | |||||||
|  | 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 | ||||||
					Loading…
					
					
				
		Reference in new issue