为什么TRegEx.split
返回一个空字符串作为第一个元素?
{name}text
。TRegEx.split('{name}text', '\{(.*)\}');
我的结果:
[empty]
name
text
因为在分隔符前面有一个空的零长度匹配,它将被添加到结果中。这类似于我所知道的大多数正则表达式实现。遗憾的是,Delphi 文档没有注意到这一点。
请注意,如果{...}
由于.*
贪婪而有多个字符串,您的模式将重叠- 而是使用\{(.*?)\}
或\{[^{}]*\}
。比较字符串的结果,如a{b}c{d}e
:
var
S: string;
begin
for S in TRegex.Split('a{b}c{d}e', '\{(.*)\}') do
begin
WriteLn(S); //->['a','b{c}d','e']
end;
WriteLn('-------------------');
for S in TRegex.Split('a{b}c{d}e', '\{(.*?)\}') do
begin
WriteLn(S); //-> ['a','b','c','d','e']
end;
ReadLn;
end.
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句