From d2c21193e0aaf0596e057119e22f06fb22a16ce7 Mon Sep 17 00:00:00 2001 From: pcnick Date: Wed, 19 Jul 2023 23:35:05 +0800 Subject: [PATCH] test template --- t.ps1 | 97 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 97 insertions(+) create mode 100644 t.ps1 diff --git a/t.ps1 b/t.ps1 new file mode 100644 index 0000000..b3f41f6 --- /dev/null +++ b/t.ps1 @@ -0,0 +1,97 @@ +# 檔名分析測試用 +$Pathes = @( + "L:\Anime\201110 WORKING’!!\[#CHAT RUMBLE#][WORKING’!!][01-13 END][BIG5][x264_aac][1280x720]\[#CHAT RUMBLE#][WORKING’!!][13][BIG5][x264_aac][1280x720][11C6E807].mp4" + "L:\Anime\200910 にゃんこい!(貓願三角戀)\[DMG][Nyan Koi!][01-12 END][848x480][BIG5]\[DMG][Nyan Koi!][12 end][848x480][BIG5].rmvb" + "L:\Anime\200910 聖剣の刀鍛冶(聖劍鍛造師)\[DMG][The Sacred Blacksmith][01-12 END][848x480][BIG5]\[DMG][The Sacred Blacksmith][04V2][848x480][BIG5].rmvb" + "L:\Anime\201104 星空へ架かる橋(架向星空之橋)\[AngelSub][Hoshizora e Kakaru Hashi][BDRip][Vol.01][1920x1080][TW_BIG5][x264_FLAC]\[AngelSub][Hoshizora e Kakaru Hashi][BDRip][01][1920x1080][BIG5][x264_FLAC].mkv" + "H:\Anime\201901 盾の勇者の成り上がり\[LKSUB][Tate no Yuusha no Nariagari][01-25][GB][720P][MP4]\[LKSUB][Tate no Yuusha no Nariagari][01][GB][720P].mp4" + "L:\Anime\202004 ストライク・ザ・ブラッド OVA IV\[Suzu-Kaze][Strike_the_Blood_IV_OVA][01-12FIN][BDRip_1080P][HEVC_YUV420P10]\[Suzu-Kaze] Strike the Blood IV 12FIN [BDRip 1920x1080 HEVC YUV420P10 FLAC].mkv" + "L:\Anime\200910 アスラクライン II(機巧魔神)\[DMG][Asura Cryin2][01-13 END][848x480][BIG5][RMVB]\[DMG][Asura Cryin 2][01][848x480][Big5].rmvb" + "H:\Data\Downloads\異世界食堂\[Lilith-Raws] Isekai Shokudou S02 - 06 [Baha][WEB-DL][1080p][AVC AAC][CHT][MP4].mp4" +) +$TestName = @($Pathes | % {$_.Split("\\")[-1]}) +#$Result = @( $TestName | +#% { @( +# $($_ -match "\[([^\]]*)\]\[(\d{1,2})\]") +# $($($_ -replace "\[(DVD|HDTV|BD)rip\]", '') -match "[\[\s](?\b[^\]\-]*)(?:[\]\[\-\s]+)(?\d{1,2})(?:[ _])?(?:[vV]\d|FIN|END)?[\]\s]") + #$($($_ -replace "\[(DVD|HDTV|BD)rip\]", '') -match "[\[\s](?\b[^\]]*\b)(?:[\]\[\-\s]+)(?\d{1,2})(?:[vV]\d|FIN|END)?[\]\s]") +#) | +#% { if ($_) { $Matches }}}) +$Result = @( $TestName | + % { + Get-NameRegex $_ -Regex "[\[\s](?\b[^\]\-]*)(?:[\]\[\-\s]+)(?\d{1,2})(?:[ _])?(?:[vV]\d|FIN|END)?[\]\s]" + Get-NameRegex $_ -Regex "[\[\s](?\b[^\]]*)(?:[\]\[\-\s]+)(?\d{1,2})(?:[ _])?(?:[vV]\d|FIN|END)?[\]\s]" + Get-NameRegex $_ -Regex "[\[\s](?\b[^\]]*)(?:[\]\[\-\s]+)(?\d{1,2})(?:[ _])?(?:[vV]\d|FIN|END)?[\]\s]" + Get-NameRegex $_ -Regex "[\[\s](?\b[^\]]*\b)(?:[\]\[\-\s]+)(?\d{1,2})(?:[ _])?(?:[vV]\d|FIN|END)?[\]\s]" + } +) + +Write-Output $Result +Write-Output $Pathes.Length +Write-Output $Result.Length +# $Matches + +$($($Pathes[1] -replace "\[(DVD|HDTV|BD)rip\]", '') -match "[\[\s](?\b[^\]]*)(?:[\]\[\-\s]+)(?\d{1,2})(?:[ _])?(?:[vV]\d|FIN|END)?[\]\s]") + +function Get-NameRegex { + param( + $Str, + $Regex + ) + if ($($Str -replace "\[(DVD|HDTV|BD)rip\]", '') -match $Regex) { $Matches } +} + +$ss = $TestName | % {$_ -split "[\[\]]"} | ? {$_ -ne ""} +$ss | ? {$_ -match "\b\d{1,2}(?=\b|[vV]\d|FIN|END)"} + +"Geisiduji is ghtr" -match "\b\w+(?=\sis\b)" +$Matches + +$Str = $TestName[0] + +function Get-NameRegex2 { + param( + $Str, + $Regex, + [switch] $Exclude, + [switch] $End + ) + # Regex 可輸入複數個 + Write-Host $Str + $Regex | % { + $key = if ($_ -match "\(\?\<(.*?)\>") { + $Matches[1] + } else { + Write-Error "$_ 沒有定義(?)" + } + if ($Str -match $_ -and($key)) { + $Result = @{ + $key = $Matches[$key] + # 將錨定字串中的特殊字元轉換為一般字串 + Anchor = $Matches[0] -replace "([\[\]\(\)])", '\$1' + } + if (-not($End)) { + $LR = $Str -split $Result["Anchor"] + $Result.Add("L", $LR[0]) + $Result.Add("R", $LR[1]) + } else { $Result.Remove("Anchor") } + $Result + } + } +} + +$EpisodeRegex = @( + "S\d{2}[\s\-]+E?(?\d{2})" + "[\[\b\s](?\d{2})[\s_]?(?:[vV]\d|END|FIN)[\]\b\s]" + "\[(?\d{1,2})\]" + #"\d" +) + +$RS1 = $TestName | % { Get-NameRegex2 $_ -Regex $EpisodeRegex } +$RS1 + +$NameRegex = @( + "[\[\b\s](?[^\[\]]*)[\]\b\s]$" +) + +$RS1 | % { Get-NameRegex2 $_["L"] -Regex $NameRegex } \ No newline at end of file