แยกหน่วยที่คั่นด้วยคอมมาจากซอร์สโค้ดโดยใช้ 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