我有下面的代码。
var
result := 'DECLARE''' + #13#10 + 'DECLARE''''';
result := TRegEx.Replace(result, '\A\s*DECLARE''\s*', 'abc', [roIgnoreCase]);
ShowMessage(result);
当我运行它时,我得到:
这是预期的结果。但是,当我将替换字符串更改为空字符串时,如下所示:
result := 'DECLARE''' + #13#10 + 'DECLARE''''';
result := TRegEx.Replace(result, '\A\s*DECLARE''\s*', '', [roIgnoreCase]);
ShowMessage(result);
我在运行程序时得到了这样的结果:
为什么会这样呢?我只想替换第一个匹配项,这就是为什么我使用\A
将正则表达式锚定在字符串的开头。
1条答案
按热度按时间v7pvogib1#
之所以会得到这样的结果,是因为TRegEx.Replace将Input字符串中的所有匹配项替换为Replacement字符串。
如果您只想替换第一个匹配项,则需要使用
TRegEx.Replace
的重载版本,该版本还允许您传递Count参数,使用该参数可以控制要替换的匹配项的数量。由于
TRegEx.Replace
的此重载版本被声明为属于TRegEx
记录的常规函数,而不是class function
,因此您必须首先声明TRegEx记录的变量,并使用TRegEx.Create设置模式和选项,然后调用Replace
的相应重载版本。因此,您的代码应该如下所示:
然后,对于
abc
替换字符串返回abcDECLARE''
,对于空替换字符串返回DECLARE''
。