2011-11-17 19 views
10

Voglio passare una chiamata di funzione (che restituisce una stringa) come una stringa sostitutiva alla funzione di sostituzione di Powershell tale che ogni corrispondenza trovata viene sostituita con una stringa diversa.Passare una funzione alla funzione di Powershell (sostituire)

Qualcosa di simile -

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

$mystring -replace "match", callback() 

pitone consentano tramite funzione 're' del modulo 'sub' che accetta una funzione di callback come input. Alla ricerca di qualcosa di simile

risposta

16

Forse si stanno cercando Regex.Replace Method (String, MatchEvaluator). In PowerShell è possibile utilizzare un blocco di script come MatchEvaluator. All'interno di questo blocco di script $args[0] corrisponde la corrispondenza corrente.

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

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

uscita:

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

PowerShell non ha (ancora?) Supporto per il passaggio di un blocco di script all'operatore -replace. L'unica opzione è quella di utilizzare direttamente [Regex]::Replace:

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