การจับภาพและการจัดกลุ่ม
กลุ่มการบันทึก (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 กลุ่มการจับภาพที่แตกต่างกัน