Как захватить несколько совпадений регулярных выражений из одной строки в магическую переменную $matches в Powershell?
Скажем, у меня есть строка "blah blah F12 blah blah F32 blah blah blah" , и я хочу сопоставить F12 и F32, как бы я взял захват как волшебной переменной Powershell $спички?
Если я запустил следующий код в Powershell:
$string = "blah blah F12 blah blah F32 blah blah blah"
$string -match "F\d\d"
Переменная $matches содержит только F12
Я также пробовал:
$string -match "(F\d\d)"
На этот раз $matches состояло из двух элементов, но оба F12
Я хотел бы, чтобы $match содержал как F12, так и F32 для дальнейшей обработки. Я просто не могу найти способ сделать это.
Вся помощь будет принята с благодарностью.:)
Ответы
Ответ 1
Вы можете сделать это, используя Select-String в PowerShell 2.0, например:
Select-String F\d\d -input $string -AllMatches | Foreach {$_.matches}
В то время как у меня был запрос оператора -matchall
на MS Connect, и это предложение было закрыто как исправлено с этим комментарием:
"Это фиксируется параметром -allmatches для select-string."
Ответ 2
Я предлагаю использовать этот синтаксис, чтобы упростить обработку массива совпадений:
$string = "blah blah F12 blah blah F32 blah blah blah" ;
$matches = ([regex]'F\d\d').Matches($string);
$matches[1].Value; # get matching value for second occurance, F32
Ответ 3
$String = @'
MemberProgram PackageID="12345678" ProgramName="Install"/
MemberProgram PackageID="87654321" ProgramName="Install"/
MemberProgram PackageID="21436587" ProgramName="Install"/
MemberProgram PackageID="78563412" ProgramName="Install"/
'@
([regex]'(?<=PackageID=\")\d+(?=\")').Matches($String).value