powershell не может использовать методы при совпадениях обратных ссылок

#powershell #backreference

#powershell #обратная ссылка

Вопрос:

я старался преобразовать случай на лету, но, похоже, методы powershell не выполняются для сопоставления обратных ссылок пример ниже:

 $a="string"
[regex]::replace( "$a",'(.)(.)',"$('$1'.toupper())$('$2'.tolower())" )
> string
$a -replace '(.)(.)',"$('${1}'.toupper())$('${2}'.tolower())"
> string

expected result
> StRiNg
 

не знаю, возможно ли это или нет

Ответ №1:

Для вызова методов класса String вам нужен блок сценария. Вы можете эффективно делать то, что хотите. Для Windows PowerShell вы не можете выполнять замены блоков сценариев с -replace помощью оператора. Вы можете сделать это в ядре PowerShell (версия 6 ), хотя:

 # Windows PowerShell
$a="string"
[regex]::Replace($a,'(.)(.)',{$args[0].Groups[1].Value.ToUpper() $args[0].Groups[2].Value.ToLower()})

# PowerShell Core
$a="string"
$a -replace '(.)(.)',{$_.Groups[1].Value.ToUpper() $_.Groups[2].Value.ToLower()}
 

Обратите внимание, что замена блока сценария распознает текущий MatchInfo объект ( $_ ). При использовании Replace() метода блок сценария передается в MatchInfo объект в качестве аргумента в автоматической переменной $args , если вы не укажете param() блок.