У меня проблема с использованием 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
), поэтому я мог бы легко создать пользовательскую функцию поиска и замены, но я хотел бы знать, что здесь происходит.
Это моя ошибка или это ошибка?