我需要正则表达式帮助来创建一个 delphi 函数来替换 Rad Studio XE2 中的 HyperString ParseWord 函数。HyperString 是一个非常有用的字符串库,它从未跳转到 Unicode。我已经让它大部分工作了,但它根本不尊重引号分隔符。我需要它与下面描述的函数完全匹配:
函数 ParseWord(const Source,Table:String;var Index:Integer):String;
使用单字符分隔符表从左到右进行顺序标记解析。带引号的字符串中的分隔符将被忽略。表中不允许使用引号分隔符。
索引是一个指针(初始化为第一个单词的“1”),由函数更新以指向下一个单词。要检索下一个单词,只需使用先前返回的索引值再次调用该函数。
注意:如果 Length(Resultant) = 0,则没有可用的附加字。 带引号的字符串中的分隔符将被忽略。(我的重点)
这是我到目前为止所拥有的:
function ParseWord( const Source, Table: String; var Index: Integer):string;
var
RE : TRegEx;
match : TMatch;
Table2,
chars : string;
begin
if index = length(Source) then
begin
result:= '';
exit;
end;
// escape the special characters and wrap in a Group
Table2 :='['+TRegEx.Escape(Table, false)+']';
RE := TRegEx.create(Table2);
match := RE.Match(Source,Index);
if match.success then
begin
result := copy( Source, Index, match.Index - Index);
Index := match.Index+match.Length;
end
else
begin
result := copy(Source, Index, length(Source)-Index+1);
Index := length(Source);
end;
end;
while ( Length(result)= 0) and (Index<length(Source)) do
begin
Inc(Index);
result := ParseWord(Source,Table, Index);
end;
欢呼和感谢。