Q1: Как получить кратчайший результат сопоставления в Select-String?
для параметра команды:
-source_file "proccess.log" -regex "D\:\\.*\.'(zip|7z|rar)'"
с файлом оболочки питания:
param(
# Enter Source File Path
[Parameter(Mandatory=$True,Position=0)]
[ValidateNotNull()]
[string]$source_file,
# regex
[Parameter(Mandatory=$True,Position=1)]
[ValidateNotNull()]
[string]$regex
)
$result3=Get-Content -Path $source_file |Select-String -Pattern "$regex"|foreach {$_.Matches.Value}
Write-Output $result3
всегда выводит самые длинные совпадающие строки, например D:\test.zip D:\string1.zip" " D:\string2.rar
как я могу получить такой результат, как:
D:\test.zip
D:\string1.zip
D:\string2.rar
тогда я могу обработать условие исключения.
Устранить проблему 1:
-source_file "proccess.log" -AllMatches -regex "D\:\\.*?\.'(zip|7z|rar)'"
спасибо за ответ от @AdminOfThings!
Ps вопрос 2: почему использование скобок в регулярном выражении должно закрываться апострофом? Regex написано догадкой ... и это работает. но я не знаю, почему.