Powershell

PowerShell - 選擇(或正則表達式)以 .story 結尾的單詞

  • May 31, 2017

我試圖從一些筆記中提取以 .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 開始編號

引用自:https://serverfault.com/questions/852359