पकड़ना और समूह बनाना
कैप्चरिंग समूह (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प्रतिस्थापन स्ट्रिंग में किया जाता है।
अन्य रेगेक्स फ्लेवर (पीसीआरई, पर्ल) में, उन्हें उप-रूटीन कॉल में भी इस्तेमाल किया जा सकता है ।
आप कुछ समूह द्वारा मेल किए गए पाठ तक पहुँच सकते हैं Matcher.group(int group)। समूह संख्या को ऊपर बताए गए नियम से पहचाना जा सकता है।
कुछ रेगेक्स फ्लेवर (पीसीआरई, पर्ल) में, एक शाखा रीसेट सुविधा है जो आपको वैकल्पिक की विभिन्न शाखाओं में समूहों को कैप्चर करने के लिए समान संख्या का उपयोग करने की अनुमति देती है ।
समूह का नाम
जावा 7 से, आप एक नामित कैप्चरिंग समूह को परिभाषित कर सकते हैं (?<name>pattern), और आप मिलान की गई सामग्री तक पहुँच सकते हैं Matcher.group(String name)। रेगेक्स लंबा है, लेकिन कोड अधिक सार्थक है, क्योंकि यह इंगित करता है कि आप रेगेक्स के साथ मैच या निकालने की कोशिश कर रहे हैं।
समूह के नाम \k<name>पैटर्न में बैक-रेफरेंस में और ${name}प्रतिस्थापन स्ट्रिंग में उपयोग किए जाते हैं।
नामांकित कैप्चरिंग समूहों को अभी भी एक ही नंबरिंग स्कीम के साथ गिना जाता है, इसलिए उन्हें भी एक्सेस किया जा सकता है Matcher.group(int group)।
आंतरिक रूप से, जावा के कार्यान्वयन में नाम से लेकर समूह संख्या तक के नक्शे हैं। इसलिए, आप 2 अलग-अलग कैप्चरिंग समूहों के लिए एक ही नाम का उपयोग नहीं कर सकते हैं।