Как записать несколько совпадений регулярных выражений из одной строки в магическую переменную $ match в Powershell? - PullRequest
18 голосов
/ 29 июня 2010

Допустим, у меня есть строка "бла-бла F12 бла-бла F32 бла-бла-бла" и я хочу сопоставить F12 и F32 , как Я собираюсь записать оба значения в магическую переменную Powershell $ match?

Если я запускаю следующий код в Powershell:

$string = "blah blah F12 blah blah F32 blah blah blah"
$string -match "F\d\d"

Переменная $ соответствия содержит только F12

Я тоже пробовал:

$string -match "(F\d\d)"

На этот раз у $ match было два предмета, но оба F12

Я бы хотел, чтобы $ match содержал F12 и F32 для дальнейшей обработки. Я просто не могу найти способ сделать это.

Вся помощь будет принята с благодарностью. :)

Ответы [ 2 ]

40 голосов
/ 29 июня 2010

Вы можете сделать это с помощью Select-String в PowerShell 2.0 следующим образом:

Select-String F\d\d -input $string -AllMatches | Foreach {$_.matches}

А в то время как я назад попросил -matchall оператора в MS Connect, и это предложениебыл закрыт как исправлено с этим комментарием:

"Это исправлено с параметром -allmatches для select-string."

17 голосов
/ 12 июня 2014

Я предлагаю использовать этот синтаксис, поскольку он упрощает обработку вашего массива совпадений:

$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
...