私はDelphiで外部差分ツールを呼び出す非回帰テストコードをいくつか持っています。次に、私のコードはdiff結果を読み込み、比較結果の日付などの許容可能な相違点を削除する必要があります。私はDelphi multiline regex
https://regex101.com/r/QBZuws/2は私が思いついたパターンとサンプルテストdiffファイルを示しています...複数行TRegEx.Replaceでこれをやろうとしているが、一致が見つかりませんでした。私は引用符を見て驚きました
ほかにfunction FilterDiff(AText:string):string;
var
LStr:string;
Regex: TRegEx;
begin
// AText:=StringReplace(AText,#13+#10,'\n',[rfReplaceAll]); // doesn't help ...
LStr := '\d\d.\d\d.20\d\d \d\d:\d\d:\d\d'; // regex for date and time
LStr := '@@.*@@\n-'+LStr+'\n\+'+LStr; // regex for paragraphs to remove
Regex := TRegEx.Create(LStr, [roMultiLine]);
Result := Regex.Replace(AText,'');
end;
procedure TReportTest.NonRegression;
var
LDiff : TStringList;
// others removed for clarity
begin
// removed section code that call an external tool and produces diff.txt file
LDiff := TStringList.Create;
LDiff.LoadFromFile('diff.txt');
Status(FilterDiff(LDiff.Text)); // show the diffs in DUnit GUI for now
LDiff.Free;
end;
、
System.RegularExpressionsAPI.pcre_exec($4D72A50,nil,'--- '#$D#$A'+++ '#$D#$A'@@ -86 +86 @@'#$D#$A'-16.11.2017 15:00:36'#$D#$A'+15.11.2017 10:47:58'#$D#$A'@@ -400 +400 @@'#$D#$A'-16.11.2017 15:00:36'#$D#$A'+15.11.2017 10:47:58'#$D#$A,132,0,1024,$7D56800,300)
System.RegularExpressionsCore.TPerlRegEx.Match
System.RegularExpressionsCore.TPerlRegEx.ReplaceAll
System.RegularExpressions.TRegEx.Replace(???,???)
TestReportAuto.FilterDiff('--- '#$D#$A'+++ '#$D#$A'@@ -86 +86 @@'#$D#$A'-16.11.2017 15:00:36'#$D#$A'+15.11.2017 10:47:58'#$D#$A'@@ -400 +400 @@'#$D#$A'-16.11.2017 15:00:36'#$D#$A'+15.11.2017 10:47:58'#$D#$A)
までTRegEx.Replaceをトレースしながら:私は私のコードです。ここ3行
のマッチング「pararaphs」を削除する必要がありますデバッガの各改行#$ D#$ Aの前と後に "実際"のように見えません...またはそれらは何ですか?
一重引用符 ''は文字列区切り文字です。実際の引用であるためにエスケープする必要があります。だから、あなたが見ることができるのはデリミタです。ドキュメンテーションはこれを明確にすべきです。私はそれをレビューすることをお勧めします。 –
@DavidHeffernan:はい、今は大丈夫です。 #$ D#$ Aがこのように連結されているのを見て驚いた –