Powershell
PowerShell - 選擇(或正則表達式)以 .story 結尾的單詞
我試圖從一些筆記中提取以 .story 結尾的單詞。這個詞總是放在一些連結中,例如
bla:///bla/bla/bla/.../word.story
。註釋可能包含多個連結,並且這些註釋的格式可能會有所不同,但我將始終以bla///../..../bla.story
.到目前為止,我一直在使用以下表達式:
[string]$story_name = Select-String \w+..story -input $notes -AllMatches | Foreach {$_.matches -replace ('\.story','')}
但現在我遇到了一些問題,因為似乎如果連結包含條目,那麼bla:///bla/blablaistory/bla/bla/word.story
這個表達式也會選擇包含***“istory”的***單詞,我不希望這樣發生。我應該使用什麼來避免這種情況?
$notes = @" alalala/bla//blablahistory/somethingnice.istory alalala/bla//blablahistory/somethingnice.story alalala/bla//blablahistory/somethingverynice.story "@ $RE = [RegEx]'/([^/]+)\.story' $storyName = $notes -split "`n" | Select-String $RE -AllMatches | Foreach {$_.Matches.Groups[1]} $storyName -split "`n"
樣本輸出:
> .\SF_852359.ps1 somethingnice somethingverynice
問題中更複雜的 RegEx 執行以下操作:
[^/]
是一個否定類,匹配除斜線之外的所有內容[^/]+
尾隨加號表示至少前面的一個。([^/]+)
括起來的括號標記第一個(並且僅在此處)擷取組/([^/]+)\.story
前導斜線和尾隨文字.story
框出我們所要的單詞。- 正則表達式的結果至少存在一個管道級別,並且可以通過 $_.Matches 對象訪問,擷取組從 1 開始編號