DelphiのGUIを説明する階層テキストを含む構造化ファイル(DFMファイル)があります。
このファイルがあり、TmyButton(マーク付き)のコンテキストにあるすべての「Color = xxx」行に一致する必要があるが、他のコンテキストには一致しないと仮定します。TMyButton-Context内には、より深い階層レベルはありません。
object frmMain: TfrmMain
Left = 311
Top = 201
Color = clBtnFace
object MyFirstButton: TMyButton
Left = 555
Top = 301
Color = 16645072 <<<<<<MATCH THIS
OnClick = ButtonClick
end
object MyLabel: TLabel
Left = 362
Top = 224
Caption = 'a Caption'
Color = 16772831
Font.Color = clWindowText
end
object Panel2: TLTPanel
Left = 348
Top = 58
Width = 444
Height = 155
Color = clRed
object MyOtherButton: TMyButton
Left = 555
Top = 301
Color = 16645072 <<<<<<MATCH THIS
OnClick = ButtonClick
end
end
end
私はそれを2日間、多くの異なる試みで試しました。ここに私の不完全なパターンの一部があります:
/^[ ]{2,}object [A-Za-z0-9]+: TmyButton\r\n/mi <<<Matches the needed context
/^[ ]{4,}Color = [A-Za-z0-9]+\r\n/mi <<<Matches the needed result
/^[ ]{2,}end\r\n/mi <<<Matches the end of the context
(理由はわかりませんが、「$」の代わりに「\ r \ n」を使用する必要がありました...)。これをまとめる必要がありますが、他の「object xxx:yyy」と「end」の行を除く他の行を無視します。
助けていただければ幸いです。