$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"
Exemplo de saída:
> .\SF_852359.ps1
somethingnice
somethingverynice
O RegEx mais complexo como na pergunta faz o seguinte:
-
[^/]
é uma classe negada que combina tudo menos uma barra -
[^/]+
o trailing plus significa pelo menos um dos anteriores. -
([^/]+)
os parênteses delimitadores marcam o primeiro (e aqui apenas) grupo de captura -
/([^/]+)\.story
a barra inicial e o literal à direita.story
enquadram a palavra que procuramos. - Resultados de uma expressão regular survice pelo menos um nível de canal e são acessíveis através do objeto $ _. Matches, sendo os grupos de captura numerados de 1