【发布时间】:2014-01-07 11:22:51
【问题描述】:
我在使用TRegEx.replace 时遇到问题:
var
Value, Pattern, Replace: string;
begin
Value := 'my_replace_string(4)=my_replace_string(5)';
Pattern := 'my_replace_string\((\d+)\)';
Replace := 'new_value(\1)';
Value := TRegEx.Replace(Value, Pattern, Replace);
ShowMessage(Value);
end;
预期的结果是new_value(4)=new_value(5),而我的代码(用Delphi XE4编译)给出new_value(4)=new_value()1)
使用 Notepad++,我得到了预期的结果。
使用命名组可以清楚地表明1 是按字面意思处理的反向引用:
Pattern := 'my_replace_string\((?<name>\d+)\)';
Replace := 'new_value(${name})';
// Result: 'new_value(4)=new_value(){name})'
替换总是那么简单(可能是零次或多次my_replace_string),所以我可以轻松创建自定义搜索和替换功能,但我想知道这里发生了什么。
是我的错还是BUG?
【问题讨论】:
标签: regex delphi delphi-xe4 backreference