ক্যাপচারিং গ্রুপ ও groupCount()
রেগেক্সে প্যারেনথেসিস `(...)` দিয়ে ক্যাপচারিং গ্রুপ তৈরি করা হয়। Matcher.groupCount() মেথড বর্তমান ম্যাচে কতটি ক্যাপচারিং গ্রুপ আছে তা রিটার্ন করে। গ্রুপ ০ (পুরো ম্যাচ) গণনায় থাকে না।
কোড উদাহরণ
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class GroupCountExample {
public static void main(String[] args) {
String str1 = "This is an example HTML script where ever alternative word is bold
.";
// বোল্ড ট্যাগের কন্টেন্ট ম্যাচ করার রেজেক্স (৩টি গ্রুপ)
String regex = "(t(\\S+)t)(\\s)";
String str = "the words tit tat tweet tostff tact that tilt text. start and end with the letter t ";
Pattern pattern = Pattern.compile(regex);
Matcher matcher = pattern.matcher(str);
while (matcher.find()) {
System.out.println(matcher.group(0)); // পুরো ম্যাচ
}
System.out.println("মোট ক্যাপচারিং গ্রুপ: " + matcher.groupCount());
}
}
আউটপুট
tit
tat
tweet
tact
that
tilt
text
tart
মোট ক্যাপচারিং গ্রুপ: 3
ব্যাখ্যা
রেজেক্স `(t(\\S+)t)(\\s)` তিনটি ক্যাপচারিং গ্রুপ থাকে:
(t(\\S+)t)— আউটার গ্রুপ (গ্রুপ ১)(\\S+)— ইনার গ্রুপ (গ্রুপ ২)(\\s)— হোয়াইটস্পেস গ্রুপ (গ্রুপ ৩)
`groupCount()` রিটার্ন করে ৩। গ্রুপ ০ (পুরো ম্যাচ) গণনায় নেই।
গ্রুপ নম্বরিং নিয়ম
- গ্রুপ নম্বরিং বাম প্যারেনথেসিসের ক্রম অনুযায়ী (লেফট-টু-রাইট)।
- নেস্টেড গ্রুপে আউটার প্রথম, তারপর ইনার।
- নন-ক্যাপচারিং গ্রুপ `(?:...)` গণনায় আসে না।
- নেমড গ্রুপ `(?<name>...)`ও গ্রুপ কাউন্টে যোগ হয় (নাম দিয়েও, নম্বর দিয়েও অ্যাক্সেস করা যায়)।
MatchResult.groupCount()
matcher.toMatchResult().groupCount() দিয়েও একই মান পাওয়া যায়। এটি ইমিউটেবল ম্যাচ রেজাল্ট অবজেক্ট থেকে গ্রুপ কাউন্ট পাওয়ার উপায়।
সারসংক্ষেপ
`groupCount()` রেগেক্স প্যাটার্নে কতটি ক্যাপচারিং গ্রুপ আছে তা জানার দ্রুত উপায়। ডাইনামিক রেজেক্স প্রসেসিং, জেনেরিক পার্সার লিখার সময় এটি খুব উপকারী। মনে রাখুন: গ্রুপ ০ গণনায় নেই, নন-ক্যাপচারিং গ্রুপও গণনায় নেই।