TRegex.Match never matches empty strings
<p>I am processing a number of strings from a TStringList and want to skip some lines that do not match a certain RegEx Pattern. Therefore I created a pattern of <code>^(?!\t\w+\t\w+)</code> and attempted</p>

<pre class="lang-pascal prettyprint-override"><code>program P;
uses
  System.SysUtils, System.Classes, System.RegularExpressions;
var
  S: TStringList;
  I: Integer;
begin
  S := TStringList.Create;
  try
    //Test and empty string should be passed
    S.Add('Test'); S.Add(''); S.Add(#9'Hello'#9'world%%');
    I := 0;
    while ((I &lt; S.Count - 1) and TRegex.IsMatch(S[I], '^(?!\t\w+\t\w+)', [])) do
      Inc(I);
    Writeln(IntToStr(I) + ': ' + S[I]);
    Readln;
  finally
    S.Free;
  end;
end.
</code></pre>

<p>Surprisingly it prints <code>1:</code> thus matches the empty string from my StringList, though it should match the pattern. I can catch this case by adding <code>and S[I] &lt;&gt; ''</code> but I'm wondering if I missed any Regex option (or similar) to correctly handle empty strings with a RegEx. I had to explicitly use empty RegexOptions in the IsMatch function, as <code>roNotEmpty</code> is used per default - but this only allows my pattern to match for a zero-length.</p>

<p>I have tested this in Delphi 10.1.</p>