Ошибка, по-видимому, связана с модулем RegularExpressionsAPI
, который упаковывает библиотеку PCRE, или в файлах PCRE OBJ, которые она связывает.Если я запускаю этот код:
program Project1;
{$APPTYPE CONSOLE}
uses
SysUtils, RegularExpressionsAPI;
var
myregexp: Pointer;
Error: PAnsiChar;
ErrorOffset: Integer;
Offsets: array[0..300] of Integer;
OffsetCount, Group: Integer;
begin
try
myregexp := pcre_compile('(?P<time>\d{1,2}:\d{1,2})(?P<judge>.{1,3})', 0, @error, @erroroffset, nil);
if (myregexp <> nil) then begin
offsetcount := pcre_exec(myregexp, nil, '00:00 X1 90 55KENNY BENNY', Length('00:00 X1 90 55KENNY BENNY'), 0, 0, @offsets[0], High(Offsets));
if (offsetcount > 0) then begin
Group := pcre_get_stringnumber(myregexp, 'time');
WriteLn(Group);
Group := pcre_get_stringnumber(myregexp, 'judge');
WriteLn(Group);
end;
end;
except
on E: Exception do
Writeln(E.ClassName, ': ', E.Message);
end;
ReadLn;
end.
Он печатает -7 и 2 вместо 1 и 2.
Если я удаляю RegularExpressionsAPI из предложения uses
и добавляю модуль pcre
из моего компонента TPerlRegEx , тогда он правильно печатает 1 и 2.
* RegularExpressionsAPI
в Delphi XE основан на моем pcre
модуле, а RegularExpressionsCore
основан нана моем PerlRegEx
устройстве.Embarcadero сделал некоторые изменения в обоих подразделениях.Они также скомпилировали свои собственные файлы OBJ из библиотеки PCRE, которые связаны RegularExpressionsAPI
.
Я сообщил об этой ошибке как QC 92497
Я также создалотдельный отчет QC 92498 , чтобы запросить TGroupCollection.GetItem
вызвать более разумное исключение при запросе именованной группы, которая не существует.(Этот код находится в блоке RegularExpressions
, который основан на коде, написанном Винсентом Парреттом, а не мной.)