anchor.diff:    end;
   end;
   
  +(*
  +//it is slower that with ec_RegExpr
   function SRegexMatchesString(const AStr, AStrRegex: string; ACaseSensitive: boolean): boolean;
   var
     Obj: TRegExpr;
  
positive.code:   LazFileUtils,
    at__jsonconf,
    ATStringProc,
    ATSynEdit_RegExpr;
  
  type
    TStringReplacePart = record
  
negative.code:       Obj.ModifierS:= false;
        Obj.ModifierI:= not ACaseSensitive;
        Obj.Expression:= AStrRegex;
        Result:= Obj.Exec(AStr) and (Obj.MatchPos[0]=1);
      except
      end;
    finally
      Obj.Free;
    end;
  end;
  *)
  
  function SRegexMatchesString(const ASubject, ARegex: string; ACaseSensitive: boolean): boolean;
  var
    Obj: TecRegExpr;
    NPos: integer;
  begin
    Obj:= TecRegExpr.Create;
    try
      Obj.Expression:= UTF8Decode(ARegex);
      Obj.ModifierI:= not ACaseSensitive;
      Obj.ModifierS:= false; //don't catch all text by .*
      Obj.ModifierM:= true; //allow to work with ^$
      Obj.ModifierX:= false; //don't ingore spaces
      NPos:= 1;
      Result:= Obj.Match(UTF8Decode(ASubject), NPos);
    finally
      Obj.Free;
    end;
  