การจับภาพและการจัดกลุ่ม
กลุ่มการบันทึก (pattern)จะสร้างกลุ่มที่มีคุณสมบัติการจับภาพ
หนึ่งที่เกี่ยวข้องที่คุณมักจะอาจจะเห็น (และใช้) เป็น(?:pattern)ซึ่งจะสร้างกลุ่มโดยไม่ต้องจับคุณสมบัติชื่อจึงไม่ใช่การจับภาพกลุ่ม
โดยทั่วไปกลุ่มจะใช้เมื่อคุณต้องการทำซ้ำลำดับของรูปแบบเช่น(\.\w+)+หรือเพื่อระบุว่าการสลับควรมีผลอย่างไรเช่น^(0*1|1*0)$( ^จากนั้น0*1หรือ1*0จากนั้น$) เทียบกับ^0*1|1*0$( ^0*1หรือ1*0$)
กลุ่มการจับภาพนอกเหนือจากการจัดกลุ่มจะบันทึกข้อความที่ตรงตามรูปแบบภายในกลุ่มการจับภาพ(pattern)ด้วย โดยใช้ตัวอย่างของคุณ(.*):, .*การแข่งขันABCและ:การแข่งขัน:และตั้งแต่.*อยู่ในการจับภาพกลุ่ม(.*)ข้อความABCจะถูกบันทึกไว้สำหรับกลุ่มจับ 1
หมายเลขกลุ่ม
รูปแบบทั้งหมดถูกกำหนดให้เป็นกลุ่มหมายเลข 0
กลุ่มใดจับภาพในการจัดทำดัชนีเริ่มต้นรูปแบบจาก 1. ดัชนีจะถูกกำหนดโดยคำสั่งของวงเล็บเปิดตัวของกลุ่มจับ ดังตัวอย่างต่อไปนี้คือกลุ่มการจับภาพทั้ง 5 กลุ่มในรูปแบบด้านล่าง:
(group)(?:non-capturing-group)(g(?:ro|u)p( (nested)inside)(another)group)(?=assertion)
| | | | | | || | |
1-----1 | | 4------4 |5-------5 |
| 3---------------3 |
2-----------------------------------------2
หมายเลขกลุ่มถูกใช้ในการอ้างอิงกลับ\nในรูปแบบและ$nในสตริงการแทนที่
ในรสชาติ regex อื่น ๆ (PCRE, Perl) ยังสามารถใช้ในการโทรแบบย่อยได้
Matcher.group(int group)คุณสามารถเข้าถึงข้อความที่จับคู่โดยบางกลุ่มด้วย หมายเลขกลุ่มสามารถระบุได้ด้วยกฎที่ระบุไว้ข้างต้น
ใน regex บางรสชาติ (PCRE, Perl) มีคุณสมบัติการรีเซ็ตสาขาซึ่งช่วยให้คุณสามารถใช้หมายเลขเดียวกันในการจับกลุ่มในการสลับสาขาต่างๆ
ชื่อกลุ่ม
จาก Java 7 คุณสามารถกำหนดกลุ่มจับชื่อ และคุณสามารถเข้าถึงเนื้อหาที่ตรงกับ(?<name>pattern) Matcher.group(String name)นิพจน์ทั่วไปยาวกว่า แต่โค้ดมีความหมายมากกว่าเนื่องจากระบุสิ่งที่คุณพยายามจับคู่หรือแยกออกด้วยนิพจน์ทั่วไป
ชื่อกลุ่มถูกใช้ในการอ้างอิงย้อนกลับ\k<name>ในรูปแบบและ${name}ในสตริงการแทนที่
Matcher.group(int group)ตั้งชื่อกลุ่มจับยังคงนับเข้ากับโครงร่างลำดับเลขเดียวกันดังนั้นพวกเขายังสามารถเข้าถึงได้ผ่านทาง
ภายในการใช้งาน Java เพียงแค่แมปจากชื่อไปยังหมายเลขกลุ่ม ดังนั้นคุณไม่สามารถใช้ชื่อเดียวกันสำหรับ 2 กลุ่มการจับภาพที่แตกต่างกัน