Ekstrak unit yang dipisahkan koma dari kode sumber menggunakan RegEx

Aug 20 2020

Saya ingin menggunakan Ekspresi Reguler untuk mengekstrak informasi dari kode sumber saya. Dapatkah Anda membantu saya membuat RegEx yang mengambil unit yang digunakan pada kode sumber?.

Contoh kode sumber:

unit ComandesVendes;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, Manteniment;

type
  TFComandesVendes = class(TFManteniment,ActualitzacioFinestra)
    QRCapsaleraNumero: TIntegerField;
    QRCapsaleraData: TDateTimeField;
    QRCapsaleraDataEntrega: TDateTimeField;
...
...     

Saya perlu mendapatkan nama file yang dipisahkan koma sejak usesklausa hingga berikutnya ;. Dalam sampel itu, keluarannya harus:

Windows
Messages
SysUtils
Variants
Classes
Graphics
Controls
Forms
Dialogs
Manteniment

Saya mencoba sesuatu seperti

^ *uses(\n* *(\w*),)* *\n* *(\w*) *;

Ini cocok dengan klausa use, tetapi tidak mengembalikan setiap nama file secara terpisah.

Terima kasih.

Jawaban

6 Thefourthbird Aug 20 2020 at 18:19

Di halaman ini dikatakan bahwa Delphi menggunakan PCRE regex flavor.

Dalam hal ini, salah satu opsinya adalah menggunakan grup penangkap yang dikombinasikan dengan \Gjangkar.

(?:^ *uses\r?\n *|\G(?!^))(\w+)(?:,\s*|;$)

Penjelasan

  • (?: Kelompok non tangkap
    • ^ *uses\r?\n * Cocokkan spasi opsional dari awal string, lalu cocokkan dan baris baru diikuti lagi dengan spasi opsional
    • | Atau
    • \G(?!^)Tegaskan posisi di akhir pertandingan sebelumnya, bukan di awal ( \GJangkar cocok di 2 posisi, baik di awal string atau di akhir pertandingan sebelumnya)
  • ) Tutup grup non tangkap
  • (\w+)Tangkap grup 1 Cocokkan 1+ karakter kata
  • (?:,\s*|;$)Bukan grup tangkap, cocokkan koma dan 0+ karakter spasi kosong atau cocokkan ;di akhir string.

Demo ekspresi reguler