我有以下代碼。
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將正則運算式錨定在字串開頭的原因。
uj5u.com熱心網友回復:
你得到你得到的結果的原因是因為TRegEx.Replace用替換字串替換了輸入字串中的所有匹配項。
如果您只想替換第一個匹配項,那么您需要使用它的多載版本,TRegEx.Replace這樣您還可以傳遞 Count 引數,您可以使用該引數來控制替換了多少次匹配項。
由于這個多載版本TRegEx.Replace被宣告為屬于TRegEx記錄的常規函式??,而不是因為class function您首先必須宣告 TRegEx 記錄的變數并使用TRegEx.Create設定模式和選項,然后呼叫適當的多載版本Replace。
所以你的代碼應該是這樣的:
var RegEx: TRegEx;
result := 'DECLARE''' #13#10 'DECLARE''''';
RegEx := TRegEx.Create('\A\s*DECLARE''\s*', [roIgnoreCase]);
Result := RegEx.Replace(Result,'abc',1);
ShowMessage(result);
result := 'DECLARE''' #13#10 'DECLARE''''';
RegEx := TRegEx.Create('\A\s*DECLARE''\s*', [roIgnoreCase]);
Result := RegEx.Replace(Result,'',1);
ShowMessage(result);
然后回傳abcDECLARE''替換abc字串和DECLARE''空替換字串。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/519527.html
