A replace function has to be a member function of some class (a form, for instance):
TForm1 = class(TForm)
...
function MyReplaceFunc(ARegExpr : TRegExpr): string;
...
implementation
...
function TForm1.MyReplaceFunc(ARegExpr: TRegExpr): string;
begin
Result := 'Whatever your function needs to return';
end;
When you call re.Replace, pass @MyReplaceFunc or MyReplaceFunc based on the compiler mode you used.
...
{$mode objfpc} //<----
...
AfterReplacement := re.Replace(Expr, @MyReplaceFunc);
...
{$mode delphi} //<----
...
AfterReplacement := re.Replace(Expr, MyReplaceFunc);