Java Reflection Package এবং Regular Expressions (Regex) এর মধ্যে একটি গুরুত্বপূর্ণ পার্থক্য রয়েছে। Reflection প্যাকেজ মূলত ক্লাস, মেথড, ফিল্ড, কনস্ট্রাক্টর ইত্যাদি সম্পর্কে তথ্য সংগ্রহ এবং ম্যানিপুলেশন করতে ব্যবহৃত হয়, যখন Regular Expressions মূলত স্ট্রিং ম্যাচিং এবং ম্যানিপুলেশন করতে ব্যবহৃত হয়।
এখানে আমরা Capturing Groups এবং Non-Capturing Groups সম্পর্কে আলোচনা করবো, যা Regular Expressions (Regex) এর গুরুত্বপূর্ণ অংশ। এটি স্ট্রিং এর মধ্যে প্যাটার্ন ম্যাচিং এর সময় কিছু অংশকে আলাদা করে ধরতে সহায়তা করে।
Capturing Groups এবং Non-Capturing Groups এর ধারণা
1. Capturing Groups:
Capturing groups হল রেগুলার এক্সপ্রেশন এর এমন অংশ যা প্যাটার্ন ম্যাচিং করার সময় কিছু নির্দিষ্ট অংশকে আলাদা করে ধরে রাখে। প্রতিটি capturing group একটি সংখ্যার মাধ্যমে চিহ্নিত হয়, যেমন প্রথম গ্রুপ 1, দ্বিতীয় গ্রুপ 2, ইত্যাদি।
- Syntax:
(pattern)- যেখানে
patternহল রেগুলার এক্সপ্রেশন এর প্যাটার্ন যা আপনি গ্রুপে রাখতে চান।
- যেখানে
উদাহরণ: Capturing Group:
ধরা যাক, আমাদের একটি স্ট্রিং আছে: "John, 123 Main Street, NY" এবং আমরা নাম, ঠিকানা, এবং শহর আলাদা করতে চাই।
import java.util.regex.*;
public class CapturingGroupExample {
public static void main(String[] args) {
String input = "John, 123 Main Street, NY";
// Capturing Group: (\\w+), (\\d+ \\w+ \\w+), (\\w+)
Pattern pattern = Pattern.compile("(\\w+), (\\d+ \\w+ \\w+), (\\w+)");
Matcher matcher = pattern.matcher(input);
if (matcher.find()) {
// Group 1: Name, Group 2: Address, Group 3: City
System.out.println("Name: " + matcher.group(1));
System.out.println("Address: " + matcher.group(2));
System.out.println("City: " + matcher.group(3));
}
}
}
আউটপুট:
Name: John
Address: 123 Main Street
City: NY
ব্যাখ্যা:
"(\\w+), (\\d+ \\w+ \\w+), (\\w+)": এখানে তিনটি capturing group রয়েছে:- প্রথম গ্রুপ
Name-এর জন্য (যেমনJohn)। - দ্বিতীয় গ্রুপ
Address-এর জন্য (যেমন123 Main Street)। - তৃতীয় গ্রুপ
City-এর জন্য (যেমনNY)।
- প্রথম গ্রুপ
2. Non-Capturing Groups:
Non-Capturing Groups একই রকম প্যাটার্ন মেলানোর কাজ করে, তবে এগুলো কোনও তথ্য ধরেনি, অর্থাৎ এই গ্রুপগুলোর সাথে কোনো ম্যাচ ধরার প্রয়োজন নেই। এগুলো শুধুমাত্র প্যাটার্নের গ্রুপিং (গোষ্ঠীভুক্ত করা) করতে ব্যবহৃত হয়।
- Syntax:
(?:pattern)- এখানে
patternহল রেগুলার এক্সপ্রেশন প্যাটার্ন যা আপনি গ্রুপে রাখতে চান, কিন্তু এটি ম্যাচের অংশ হিসেবে সংরক্ষণ করবে না।
- এখানে
উদাহরণ: Non-Capturing Group:
ধরা যাক, আপনি একটি স্ট্রিংতে শহর এবং স্টেটের নাম আলাদা করতে চান, কিন্তু আপনার শহর এবং স্টেটের নামের মধ্যে কোনো পার্থক্য ধরতে হবে না।
import java.util.regex.*;
public class NonCapturingGroupExample {
public static void main(String[] args) {
String input = "123 Main Street, New York, NY";
// Non-Capturing Group: (?:\\d+ \\w+ \\w+), (\\w+), (\\w+)
Pattern pattern = Pattern.compile("(?:\\d+ \\w+ \\w+), (\\w+), (\\w+)");
Matcher matcher = pattern.matcher(input);
if (matcher.find()) {
// Group 1: City, Group 2: State
System.out.println("City: " + matcher.group(1));
System.out.println("State: " + matcher.group(2));
}
}
}
আউটপুট:
City: New
State: York
ব্যাখ্যা:
"(?:\\d+ \\w+ \\w+), (\\w+), (\\w+)": এখানে(?:...)হচ্ছে non-capturing group যা শুধুমাত্র গ্রুপিং করার জন্য ব্যবহৃত হয়েছে, কিন্তু সেই অংশটি ধরে রাখছে না।CityএবংStateগ্রুপগুলি শুধুমাত্র ম্যাচ হতে এবং রিটার্ন হতে পারে, কিন্তু প্রথম গ্রুপটি শুধুমাত্র গোষ্ঠীভুক্ত করেছিল।
3. Capturing এবং Non-Capturing Groups এর পার্থক্য:
- Capturing Group: এটি স্ট্রিংয়ের অংশগুলিকে ধরে রাখে, যার মাধ্যমে আপনি এক্সপ্রেশনটি মেলানোর পর ওই অংশগুলি আলাদাভাবে অ্যাক্সেস করতে পারেন। এই গ্রুপের জন্য
group()মেথড ব্যবহার করে আপনি মেলানো অংশগুলি বের করতে পারেন। - Non-Capturing Group: এটি কেবলমাত্র গ্রুপিংয়ের জন্য ব্যবহৃত হয় এবং এটি কোনো তথ্য সংরক্ষণ করে না। যদি আপনি শুধুমাত্র একটি প্যাটার্ন গ্রুপ করতে চান, কিন্তু সেটি প্রয়োজন না হয়, তবে এটি ব্যবহার করা হয়।
Summary of Syntax:
| Syntax | Description |
|---|---|
(pattern) | Capturing group (captures the matched part) |
(?:pattern) | Non-capturing group (matches but doesn't capture the part) |
- Capturing Groups এবং Non-Capturing Groups রেগুলার এক্সপ্রেশনগুলোকে আরও শক্তিশালী এবং নমনীয় করে তোলে।
Capturing Groupsপ্যাটার্নের মেলানো অংশগুলোকে আলাদা করে ধরতে ব্যবহৃত হয়, যেখানেNon-Capturing Groupsশুধুমাত্র গ্রুপিংয়ের জন্য ব্যবহৃত হয়, কিন্তু কোনো তথ্য সংরক্ষণ করে না। - এই দুটি কৌশলই স্ট্রিংয়ের মধ্যে প্যাটার্ন খুঁজে বের করার সময় বেশি নমনীয়তা এবং সুবিধা প্রদান করে।
Read more