如何使用 Delphi (10.3) TRegEx.IsMatch匹配空字符串?
以下情况返回false我期望返回的位置true:
fDoesMatch := TRegEx.IsMatch('', '^$');
fDoesMatch := TRegEx.IsMatch('', '^.{0}$');
fDoesMatch := TRegEx.IsMatch('', '\A\z');
Run Code Online (Sandbox Code Playgroud)
正如我在文档https://docwiki.embarcadero.com/Libraries/Sydney/en/System.RegularExpressions.TRegEx中看到的那样 ,Delphi 在底层使用 C 库“PCRE”来执行正则表达式。
尝试https://regex101.com/上的正则表达式模式匹配,所以我想知道为什么它不适用于 Delphi
TRegEx默认情况下不匹配空字符串,因为它是使用未记录的 roNotEmpty选项创建的。
您必须显式排除roNotEmpty选项才能启用空字符串匹配:
fDoesMatch := TRegEx.IsMatch('', '^$', []);
Run Code Online (Sandbox Code Playgroud)
决定使用[roNotEmpty]默认值是为了保持与较旧的 Delphi 版本的向后兼容性。请参阅微妙的 Delphi TRegEx 更改。