#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()
блок.