RegexBuddy에서 기대했던대로 동작하는 패턴을 만들었습니다. 그러나 적어도 TRegEx 또는 TPerlRegEx에 내장 된 최신 버전을 사용할 때는 Delphi XE로이 파일을 전송할 수 없습니다.Regex는 Delphi XE의 캡처 그룹 이름을 지정했습니다.
내 실제 코드에는 6 개의 캡처 그룹이 있지만 더 쉬운 예를 통해이 문제를 설명 할 수 있습니다. 이 코드는 첫 번째 대화 상자에서 "3"을 표시 한 다음 두 번째 대화 상자를 실행할 때 예외 (-7 개의 인덱스가 범위를 벗어남)를 발생시킵니다. 나는 하나 개의 캡처 그룹을 사용하는 경우
var
Regex: TRegEx;
M: TMatch;
begin
Regex := TRegEx.Create('(?P<time>\d{1,2}:\d{1,2})(?P<judge>.{1,3})');
M := Regex.Match('00:00 X1 90 55KENNY BENNY');
ShowMessage(IntToStr(M.Groups.Count));
ShowMessage(M.Groups['time'].Value);
end;
는 그러나
Regex := TRegEx.Create('(?P<time>\d{1,2}:\d{1,2})');
첫 번째 대화 상자가 "2"를 보여줍니다 예상대로 두 번째 대화의 시간 "00:00"가 표시됩니다.
그러나 이것은 하나의 명명 된 캡처 그룹 만 허용되었지만 그 경우가 아니라면 조금 제한 될 것입니다 ... 캡처 그룹 이름을 "atime"으로 변경하면.
var
Regex: TRegEx;
M: TMatch;
begin
Regex := TRegEx.Create('(?P<atime>\d{1,2}:\d{1,2})(?P<judge>.{1,3})');
M := Regex.Match('00:00 X1 90 55KENNY BENNY');
ShowMessage(IntToStr(M.Groups.Count));
ShowMessage(M.Groups['atime'].Value);
end;
예상대로 "3"과 "00:00"이 표시됩니다. 내가 사용할 수없는 예약어가 있습니까? 나는 진짜 예제에서 완전히 임의의 이름을 시도했기 때문에 그렇게 생각하지 않는다. 이 문제의 원인을 파악할 수 없습니다.
이것은 분명히 버그이므로보고해야합니다. – jachguate