Byte based pos forces to an ugly workaround:
if RegexObj.Exec(S) then
begin
Memo1.SetFocus;
Memo1.SelStart := UTF8Length(Copy(S, 1, RegexObj.MatchPos[0])) - 1;
memo1.SelLength := UTF8Length( Copy(S, RegexObj.MatchPos[0], RegexObj.MatchLen[0]) );
sleep(1000);
while RegexObj.ExecNext do
begin
Memo1.SelStart := UTF8Length(Copy(S, 1, RegexObj.MatchPos[0])) - 1;
Memo1.SelLength := UTF8Length( Copy(S, RegexObj.MatchPos[0], RegexObj.MatchLen[0]) );
sleep(1000);
end;
end;