regex - группы - регулярные выражения онлайн




Как записать несколько совпадений регулярных выражений из одной строки в магическую переменную $ match в Powershell? (2)

Допустим, у меня есть строка «бла-бла 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 для дальнейшей обработки. Я просто не могу найти способ сделать это.

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


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

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

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

Msgstr "Это исправлено с параметром -allmatches для строки выбора."


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

$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




powershell-v2.0