2011-11-17 20 views
10

Chcę przekazać wywołanie funkcji (które zwraca ciąg) jako ciąg zastępczy do funkcji zastępowania Powershell, tak aby każdy znaleziony dopasowany został zastąpiony innym ciągiem.Przekazywanie funkcji do funkcji Powershella (zamiany)

Coś -

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

$mystring -replace "match", callback() 

Python umożliwia to poprzez „wtórne” funkcji modułu 'podrzędnych, który przyjmuje funkcję wywołania zwrotnego jako wejście. Szukasz czegoś podobnego?

Odpowiedz

16

Może szukasz Regex.Replace Method (String, MatchEvaluator). W PowerShell blok skryptu może być użyty jako MatchEvaluator. Wewnątrz tego skryptu blok $args[0] jest bieżącym dopasowaniem.

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

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

wyjściowa:

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

PowerShell nie ma (jeszcze?) Wsparcia dla przekazywania bloku skryptu do operatora -replace. Jedynym rozwiązaniem jest, aby używać [Regex]::Replace bezpośrednio:

[Regex]::Replace($mystring, 'match', {callback}) 
Powiązane problemy