ক্যাপচারিং গ্রুপ রিভিউ
ক্যাপচারিং গ্রুপ: প্যাটার্নের অংশকে প্যারেনথেসিস `(...)` দিয়ে গ্রুপ করলে সেটি "ক্যাপচার" হয় — بعدে `matcher.group(1)`, `group(2)` দিয়ে অ্যাক্সেস করা যায়। গ্রুপ ০ = পুরো ম্যাচ।
উদাহরণ: ক্যাপচারিং গ্রুপ
String regex = "(.*)(\\d+)(.*)"; // ৩টি ক্যাপচারিং গ্রুপ
// ইনপুট: "sample data with 1234 (digits) in middle"
// গ্রুপ ০: পুরো স্ট্রিং
// গ্রুপ ১: "sample data with 123"
// গ্রুপ ২: "4"
// গ্রুপ ৩: " (digits) in middle"
নন-ক্যাপচারিং গ্রুপ কী?
নন-ক্যাপচারিং গ্রুপ একই গ্রুপিং ফাংশনালিটি দেয় কিন্তু রেজাল্ট ক্যাপচার করে না। সিনট্যাক্স: (?:...)। এটি গ্রুপ কাউন্টে যোগ হয় না।
কোড উদাহরণ: নন-ক্যাপচারিং গ্রুপ
import java.util.Scanner;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class NonCapturingGroupExample {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("ইনপুট টেক্সট লিখুন: ");
String input = sc.nextLine();
// মাঝের ডিজিট গ্রুপ নন-ক্যাপচারিং: (?:\\d+)
String regex = "(.*)(?:\\d+)(.*)";
Pattern pattern = Pattern.compile(regex);
Matcher matcher = pattern.matcher(input);
if (matcher.find()) {
System.out.println("গ্রুপ ০ (পুরো ম্যাচ): " + matcher.group(0));
System.out.println("গ্রুপ ১: " + matcher.group(1));
System.out.println("গ্রুপ ২: " + matcher.group(2));
// matcher.group(3) -> IndexOutOfBoundsException! শুধু ২টি গ্রুপ।
System.out.println("গ্রুপ কাউন্ট: " + matcher.groupCount()); // আউটপুট: ২
} else {
System.out.println("NO MATCH");
}
}
}
আউটপুট উদাহরণ
ইনপুট টেক্সট লিখুন: sample data with 1234 (digits) in middle
গ্রুপ ০ (পুরো ম্যাচ): sample data with 1234 (digits) in middle
গ্রুপ ১: sample data with 123
গ্রুপ ২: (digits) in middle
গ্রুপ কাউন্ট: 2
তুলনা: ক্যাপচারিং vs নন-ক্যাপচারিং
| বিষয় | ক্যাপচারিং ( ... ) | নন-ক্যাপচারিং ( ?: ... ) |
|---|---|---|
| সিনট্যাক্স | (pattern) | (?:pattern) |
| রেজাল্ট ক্যাপচার | হ্যাঁ | না |
| groupCount() এ যোগ | হ্যাঁ | না |
| group(n) দিয়ে অ্যাক্সেস | হ্যাঁ | না (Exception) |
| পারফরম্যান্স | কিছুটা স্লোওয়ার | ফাস্টার (ক্যাপচারিং ওভারহেড নেই) |
| ব্যাকরেফারেন্স (\1, \2) | কাজ করে | কাজ করে না |
কখন নন-ক্যাপচারিং গ্রুপ ব্যবহার করবেন?
- গ্রুপিং শুধু অপারেটর প্রায়োরিটি বা অল্টারনেশন (`|`) এর জন্য দরকার হলে।
- রেজাল্ট ক্যাপচার করার প্রয়োজন নেই।
- পারফরম্যান্সкриটিক্যাল কোডে।
- URL/ফোন নম্বর ম্যাচিংয়ে কমন প্রিফিক্স গ্রুপ করতে (যেমন `(?:http|https)://`)।
সারসংক্ষেপ
নন-ক্যাপচারিং গ্রুপ `(?:...)` রেজেক্সকে দ্রুত এবং কম মেমরি-খরচে করে। গ্রুপ কাউন্ট কম রাখে, যা বড় রেজেক্সে গ্রুপ নম্বর ম্যানেজ করতে সাহায্য করে। ক্যাপচারিং প্রয়োজন নেই কোথাও সেখানে এটি ব্যবহার করুন।