আপনার নীচের পাঠ্য ইনপুট dogcatcatcatএবং একটি প্যাটার্ন রয়েছে তা কল্পনা করুনdog(cat(catcat))
এই ক্ষেত্রে, আপনার 3 টি গ্রুপ রয়েছে, প্রথমটি ( বড় গ্রুপ) ) ম্যাচের সাথে মিলে যায়।
ম্যাচ == dogcatcatcatএবং গ্রুপ 0 ==dogcatcatcat
গ্রুপ 1 == catcatcat
গ্রুপ 2 == catcat
তাহলে এ সব কিসের?
আসুন Regexক্লাস ব্যবহার করে সি # (.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) 'কারণে তৈরি করা হয়েছিল subpattern ' (...)(...)(...)এর প্রধান প্যাটার্ন (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 সংগ্রহ।
উপসংহারটি হ'ল: আপনি কীভাবে আপনার প্যাটার্নের গ্রুপগুলি ডিজাইন করেন সেদিকে মনোযোগ দিন। আপনি আপফ্রন্ট চিন্তা করা উচিত কি আচরণ গ্রুপের স্পেসিফিকেশন, মত ঘটায় (...)(...), (...){2}বা (.{3}){2}ইত্যাদি
আশা করি এটি ক্যাপচার , গ্রুপ এবং ম্যাচগুলির মধ্যে পার্থক্য সম্পর্কে কিছুটা আলোকপাত করতে সহায়তা করবে ।
a functionality that won't be used in the majority of casesআমার মনে হয় সে নৌকাটি মিস করেছে। স্বল্পমেয়াদে(?:.*?(collection info)){4,20}দক্ষতা আরও কয়েকশ শতাংশ বেড়ে যায়।