แยกหน่วยที่คั่นด้วยคอมมาจากซอร์สโค้ดโดยใช้ RegEx

Aug 20 2020

ฉันต้องการใช้นิพจน์ทั่วไปเพื่อดึงข้อมูลจากซอร์สโค้ดของฉัน คุณสามารถช่วยฉันสร้าง RegEx ที่ดึงหน่วยที่ใช้กับซอร์สโค้ดได้หรือไม่?

ตัวอย่างซอร์สโค้ด:

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;
...
...     

ฉันต้องได้รับชื่อไฟล์ที่คั่นด้วยเครื่องหมายจุลภาคตั้งแต่ประโยคขึ้นไปอีกuses ;ในตัวอย่างนั้นผลลัพธ์ต้องเป็น:

Windows
Messages
SysUtils
Variants
Classes
Graphics
Controls
Forms
Dialogs
Manteniment

ฉันกำลังลองสิ่งที่ชอบ

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

ตรงกับประโยคการใช้งาน แต่จะไม่ส่งคืนชื่อไฟล์แต่ละไฟล์แยกกัน

ขอขอบคุณ.

คำตอบ

6 Thefourthbird Aug 20 2020 at 18:19

ในหน้านี้ระบุว่า Delphi ใช้รส PCRE regex

ในกรณีนี้ทางเลือกหนึ่งคือใช้กลุ่มการจับภาพร่วมกับ\Gจุดยึด

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

คำอธิบาย

  • (?: ไม่ใช่กลุ่มการจับภาพ
    • ^ *uses\r?\n * จับคู่ช่องว่างที่ไม่บังคับจากจุดเริ่มต้นของสตริงจากนั้นจับคู่และขึ้นบรรทัดใหม่ตามด้วยช่องว่างเพิ่มเติมอีกครั้ง
    • | หรือ
    • \G(?!^)ยืนยันตำแหน่งในตอนท้ายของการแข่งขันก่อนหน้าไม่ใช่ที่จุดเริ่มต้น ( \Gจุดยึดจับคู่ที่ 2 ตำแหน่งไม่ว่าจะที่จุดเริ่มต้นของสตริงหรือเมื่อสิ้นสุดการแข่งขันก่อนหน้า)
  • ) ปิดกลุ่มที่ไม่จับภาพ
  • (\w+)จับภาพกลุ่ม 1จับคู่อักขระ 1+ คำ
  • (?:,\s*|;$)ไม่จับกลุ่มจับคู่อักขระเครื่องหมายจุลภาคและ 0+ ช่องว่างหรือจับคู่;ที่ส่วนท้ายของสตริง

การสาธิต Regex