2011-11-17 53 views
10

PowerShellのreplace関数に置換文字列として関数呼び出し(文字列を返す)を渡して、見つかったそれぞれの文字列を別の文字列に置き換えたいとします。Powershell(replace)関数に関数を渡す

何かのような -

$global_counter = 0 
Function callback() 
{ 
    $global_counter += 1 
    return "string" + $global_counter 
} 

$mystring -replace "match", callback() 

Pythonは、入力として、コールバック関数を受け付ける「再」モジュールの「サブ」機能を介してこれを可能にします。同様のものを探す

答えて

16

探しています。 PowerShellでは、スクリプトブロックはMatchEvaluatorとして使用できます。このスクリプトブロック内では、$args[0]が現在のマッチです。

$global_counter = 0 
$callback = { 
    $global_counter += 1 
    "string-$($args[0])-" + $global_counter 
} 

$re = [regex]"match" 
$re.Replace('zzz match match xxx', $callback) 

出力:

zzz string-match-1 string-match-2 xxx 
10

PowerShellは、-replaceオペレータにスクリプトブロックを渡すことはできません(まだですか?)。ここでの唯一のオプションは、直接[Regex]::Replaceを使用することです:おそらく、あなたはRegex.Replace Method (String, MatchEvaluator)ため

[Regex]::Replace($mystring, 'match', {callback})