The reason it does not work because it does not handle upper/lower case for letters with code above 127:
class function TRegExpr.InvertCaseFunction (const Ch : REChar) : REChar;
begin
{$IFDEF UniCode}
if (Ch >= #128) then
Result := Ch;
simply change that to:
class function TRegExpr.InvertCaseFunction (const Ch : REChar) : REChar;
begin
{$IFDEF UniCode}
if (Ch >= #128) then
begin
Result := UpCase(Ch);
if Result = Ch
then Result := LowerCase(Ch);
end
else
{$ENDIF}
begin
Result := {$IFDEF FPC}AnsiUpperCase (Ch) [1]{$ELSE} {$IFDEF SYN_WIN32}REChar (CharUpper (PChar (Ch))){$ELSE}REChar (toupper (integer (Ch))){$ENDIF} {$ENDIF};
if Result = Ch
then Result := {$IFDEF FPC}AnsiLowerCase (Ch) [1]{$ELSE} {$IFDEF SYN_WIN32}REChar (CharLower (PChar (Ch))){$ELSE}REChar(tolower (integer (Ch))){$ENDIF} {$ENDIF};
end;
end; { of function TRegExpr.InvertCaseFunction
and it should work, I believe.
Here is my test:
program Project1;
{$mode objfpc}{$H+}
uses
LazUTF8, RegExprU2;
var
s: string;
re: TRegExpr;
begin
re := TRegExpr.Create();
re.ModifierI := true;//case innsensitive
s := '"Dasypyrum villosum","Žitec dlakavi"';
re.InputString := s;
s := '","[a-zčžš]+ [a-zčžš]+"$';
re.Expression := s;
WriteLn(re.Exec(1));
ReadLn;
end.
It returns
True.