Lambda Expression in Powershell
Solution 1:
In PowerShell 2.0 you can use a script block ({ some code here }
) as delegate:
$MatchEvaluator =
{
param($m)
if ($m.Groups["val"].Value -eq ";")
{
#...
}
}
$result = $r.Replace($input, $MatchEvaluator)
Or directly in the method call:
$result = $r.Replace($input, { param ($m) bla })
Tip:
You can use [regex]
to convert a string to a regular expression:
$r = [regex]"\((?<val>[\,\!\;\:])\)"
$r.Matches(...)
Solution 2:
Sometimes you just want something like this:
{$args[0]*2}.invoke(21)
(which will declare an anonymous 'function' and call it immediately.)
Solution 3:
You can use this overload
[regex]::replace(
string input,
string pattern,
System.Text.RegularExpressions.MatchEvaluator evaluator
)
The delegate is passes as a scriptblock (lambda expression) and the MatchEvaluator can be accessed via the $args variable
[regex]::replace('hello world','hello', { $args[0].Value.ToUpper() })