【发布时间】:2018-01-28 08:01:21
【问题描述】:
我使用的是delphi 10.1。 我在执行以下操作时得到了意想不到的结果
procedure TForm1.FormCreate(Sender: TObject);
var
Match: TMatch;
Regex: TRegex;
Perl: TPerlRegEx;
const
s1 = 'Réaitaei: test123';
s2 = 'Réàààaitaei: test123';
s3 = 'Réàààààààààaitaei: test123';
pattern = '(.*): ';
begin
Regex := TRegex.Create(pattern);
Match := Regex.Match(s1);
Assert(Match.Success);
Memo1.Lines.Add(Match.Groups[1].Value);
Match := Regex.Match(s2);
Assert(Match.Success);
Memo1.Lines.Add(Match.Groups[1].Value);
Match := Regex.Match(s3);
Assert(Match.Success);
Memo1.Lines.Add(Match.Groups[1].Value);
Perl := TPerlRegEx.Create;
Perl.RegEx := pattern;
Perl.Compile;
Perl.Subject := s1;
Assert(Perl.Match);
Memo1.Lines.Add(Perl.Groups[1]);
Perl.Subject := s2;
Assert(Perl.Match);
Memo1.Lines.Add(Perl.Groups[1]);
Perl.Subject := s3;
Assert(Perl.Match);
Memo1.Lines.Add(Perl.Groups[1]);
end;
我明白了:
Réaitaei
Réàààaitaei:t
Réààààààààaaitaei:测试
雷亚泰伊
雷亚塔艾泰伊
雷亚塔亚阿亚泰伊
所以当文档说TRegex 只是TPerlRegex 的包装器时,TPerlRegex 有效,但 TRegex 无效。
我错过了什么还是一个错误?
我发现 Marco Cantu 的帖子说自从 delphi xe7 以来,delphi 使用 pcre 8.35,所以我不认为使用 unicode 会出现任何问题。
【问题讨论】:
-
柏林也一样,但东京 10.2.1 有效。两者都会导致内存泄漏,您没有为 Perl 调用 Free。
-
谢谢。我刚刚意识到我的标题不是一个问题,所以我要改写一下,以便有答案。如果您认为这绝对是一个错误,您可能希望将您的评论作为答案。
-
不确定,但这在柏林有效: Assert(TRegex.Match('Réàààààààààaitaei: test123', '(.*): ').Groups[1].Value = 'Réààààààààaitaei');
-
可能是这个RSP-15145
-
泰。我安装了delphi tokyo starter,我的代码现在可以工作了,它确实与您指出的错误报告相同。甚至找到了另一个相关的RSP-17697。
标签: regex debugging unicode pcre delphi-10.1-berlin