कल्पना कीजिए कि आपके पास निम्न पाठ इनपुट है dogcatcatcat और एक पैटर्न हैdog(cat(catcat))
इस मामले में, आपके पास 3 समूह हैं, पहला समूह ( प्रमुख समूह) ) मैच से मेल खाता है।
मैच == dogcatcatcat और Group0 ==dogcatcatcat
समूह 1 == catcatcat
समूह 2 == catcat
तो यह सब क्या है?
आइए Regexकक्षा का उपयोग करके C # (.NET) में लिखे गए एक छोटे से उदाहरण पर विचार करें ।
int matchIndex = 0;
int groupIndex = 0;
int captureIndex = 0;
foreach (Match match in Regex.Matches(
"dogcatabcdefghidogcatkjlmnopqr", // input
@"(dog(cat(...)(...)(...)))") // pattern
)
{
Console.Out.WriteLine($"match{matchIndex++} = {match}");
foreach (Group @group in match.Groups)
{
Console.Out.WriteLine($"\tgroup{groupIndex++} = {@group}");
foreach (Capture capture in @group.Captures)
{
Console.Out.WriteLine($"\t\tcapture{captureIndex++} = {capture}");
}
captureIndex = 0;
}
groupIndex = 0;
Console.Out.WriteLine();
}
आउटपुट :
match0 = dogcatabcdefghi
group0 = dogcatabcdefghi
capture0 = dogcatabcdefghi
group1 = dogcatabcdefghi
capture0 = dogcatabcdefghi
group2 = catabcdefghi
capture0 = catabcdefghi
group3 = abc
capture0 = abc
group4 = def
capture0 = def
group5 = ghi
capture0 = ghi
match1 = dogcatkjlmnopqr
group0 = dogcatkjlmnopqr
capture0 = dogcatkjlmnopqr
group1 = dogcatkjlmnopqr
capture0 = dogcatkjlmnopqr
group2 = catkjlmnopqr
capture0 = catkjlmnopqr
group3 = kjl
capture0 = kjl
group4 = mno
capture0 = mno
group5 = pqr
capture0 = pqr
चलो पहले मैच का विश्लेषण करें (match0 ।
आप देख सकते हैं वहाँ तीन हैं नाबालिग समूहों : group3, group4औरgroup5
group3 = kjl
capture0 = kjl
group4 = mno
capture0 = mno
group5 = pqr
capture0 = pqr
उन समूहों (3-5) को मुख्य पैटर्न के ' सबपाटन ' (...)(...)(...)के कारण बनाया गया था (dog(cat(...)(...)(...)))
मूल्य के group3अनुरूप यह कब्जा है ( capture0)। (के मामले में group4और के रूप में group5)। ऐसा इसलिए है क्योंकि समूह दोहराव जैसे नहीं हैं (...){3}।
ठीक है, आइए एक और उदाहरण पर विचार करें जहां एक समूह दोहराव है ।
हम मिलान किया जा से (कोड ऊपर दिखाए गए के लिए) रेगुलर एक्सप्रेशन पैटर्न को संशोधित करते हैं (dog(cat(...)(...)(...)))करने के लिए (dog(cat(...){3})), आप ध्यान देंगे निम्नलिखित है कि वहाँ समूह पुनरावृत्ति : (...){3}।
अब आउटपुट बदल गया है:
match0 = dogcatabcdefghi
group0 = dogcatabcdefghi
capture0 = dogcatabcdefghi
group1 = dogcatabcdefghi
capture0 = dogcatabcdefghi
group2 = catabcdefghi
capture0 = catabcdefghi
group3 = ghi
capture0 = abc
capture1 = def
capture2 = ghi
match1 = dogcatkjlmnopqr
group0 = dogcatkjlmnopqr
capture0 = dogcatkjlmnopqr
group1 = dogcatkjlmnopqr
capture0 = dogcatkjlmnopqr
group2 = catkjlmnopqr
capture0 = catkjlmnopqr
group3 = pqr
capture0 = kjl
capture1 = mno
capture2 = pqr
फिर से, चलो पहले मैच का विश्लेषण करें ( match0)।
अधिक छोटे समूह नहीं हैं group4 और पुनरावृत्ति केgroup5 कारण ( {n} जिसमें n> = 2 ) उन्हें एक ही समूह में मिला दिया गया है(...){3} group3 ।
इस मामले में, group3मान इसके अनुरूप है capture2( अंतिम कैप्चर , दूसरे शब्दों में)।
अतः यदि आप 3 भीतरी कैप्चर की जरूरत है ( capture0, capture1, capture2) को समूह के माध्यम से चक्र करना होगाCaptures संग्रह।
Сonclusion है: अपने पैटर्न के समूहों को डिज़ाइन करने के तरीके पर ध्यान दें। आपको यह सोचना चाहिए कि समूह के विनिर्देशन के कारण क्या व्यवहार होता है, जैसे (...)(...), (...){2}या (.{3}){2}आदि।
उम्मीद है कि यह कैप्चर , समूह और मैचों के बीच के अंतर पर कुछ प्रकाश डालने में मदद करेगा ।
a functionality that won't be used in the majority of casesमुझे लगता है कि वह नाव से चूक गया। अल्पावधि में(?:.*?(collection info)){4,20}दक्षता और अधिक बढ़ जाती है कि कुछ सौ प्रतिशत।