Ответ 1
Вы можете использовать оператор -match
, чтобы переформулировать свою команду как:
some-command | Foreach-Object { if($_ -match '^(//[^#]*)') { some-other-command $($matches[1])}}
В PowerShell я снова и снова делаю такие вещи для матчей:
some-command | select-string '^(//[^#]*)' |
%{some-other-command $_.matches[0].groups[1].value}
Итак, в основном - запустите команду, которая генерирует строки текста, и для каждой строки я хочу запустить команду для захвата регулярных выражений внутри строки (если она совпадает). Кажется, очень просто. Вышеупомянутые работы, но есть ли более короткий способ вытащить группы захвата регулярных выражений? У Perl было 1 доллар и так далее, если я правильно помню. У Posh должно быть что-то похожее, не так ли? Я видел ссылки "$ matches" на SO, но не могу понять, что делает этот набор.
Я очень новичок в PowerShell, но начал учиться.
Вы можете использовать оператор -match
, чтобы переформулировать свою команду как:
some-command | Foreach-Object { if($_ -match '^(//[^#]*)') { some-other-command $($matches[1])}}
Именованная замена
'foo bar' -replace '(?<First>foo).+', '${First}'
Возвращает: foo
Без изменений
'foo bar' -replace '(foo).+(ar)', '$2 z$2 $1'
Возвращает: ar zar foo
Вы можете попробовать следующее:
Get-Content foo.txt | foreach { some-othercommand [regex]::match($_,'^(//[^#]*)').value }