Java Reflection Package মূলত ক্লাস, মেথড, ফিল্ড এবং কনস্ট্রাক্টরের তথ্যের উপর রিফ্লেকশন অপারেশন সম্পাদন করতে ব্যবহৃত হয়। তবে, আপনি যে বিষয়টি উল্লেখ করেছেন, তা Java Regular Expressions (Regex) এর অংশ। Possessive Quantifiers Regex-এর মধ্যে একটি গুরুত্বপূর্ণ কনসেপ্ট এবং এটি বিশেষভাবে স্ট্রিংয়ের কিছু নির্দিষ্ট সংখ্যক উপস্থিতি বা ম্যাচিং নির্ধারণ করতে ব্যবহৃত হয়।
এই পোস্টে Possessive Quantifiers যেমন *+, ++, {n}+, এবং {n,m}+ এর ব্যবহার আলোচনা করা হবে, যা রেগুলার এক্সপ্রেশন প্যাটার্নের মধ্যে ব্যবহৃত হয়। এগুলোর মাধ্যমে আপনি একটি প্যাটার্নের শর্তাবলী আরও নির্দিষ্টভাবে কাস্টমাইজ করতে পারেন।
1. *+ (Possessive Star Quantifier):
*+হল possessive quantifier, যা*এর মতো কাজ করে (যে কোন সংখ্যা, 0 বা তার বেশি), তবে এই quantifier ব্যবহার করলে এটি backtracking বন্ধ করে দেয়। অর্থাৎ, একবার এটি মিলানো শুরু করলে এটি আর ফিরে যাবে না।
Syntax:
x*+
- এখানে
xএর 0 বা তার বেশি উপস্থিতি মেলা হবে, কিন্তু backtracking হবে না।
Example:
import java.util.regex.*;
public class PossessiveStarExample {
public static void main(String[] args) {
String regex = "a*+b"; // Possessive star quantifier
String text = "aaab";
Pattern pattern = Pattern.compile(regex);
Matcher matcher = pattern.matcher(text);
// Testing for match
boolean isMatch = matcher.matches();
System.out.println("Does it match? " + isMatch); // true
}
}
Output:
Does it match? true
ব্যাখ্যা:
- এখানে
a*+প্যাটার্নটিaএর 0 বা তার বেশি উপস্থিতি মেলায়, তবে possessive nature এর কারণে এটি একটি বারেই মেলাতে থাকে এবং ফিরে যায় না, যতক্ষণ না এটি পুরো স্ট্রিং মেলে।
2. ++ (Possessive Plus Quantifier):
++হল possessive quantifier যা+এর মতো কাজ করে (অর্থাৎ, একটি বা তার বেশি), তবে এটি backtracking বন্ধ করে দেয়। একবার এটি মিলানো শুরু করলে এটি আর ফিরে যাবে না।
Syntax:
x++
- এখানে
xএর এক বা তার বেশি উপস্থিতি মেলা হবে, কিন্তু backtracking হবে না।
Example:
import java.util.regex.*;
public class PossessivePlusExample {
public static void main(String[] args) {
String regex = "a++b"; // Possessive plus quantifier
String text = "aaab";
Pattern pattern = Pattern.compile(regex);
Matcher matcher = pattern.matcher(text);
// Testing for match
boolean isMatch = matcher.matches();
System.out.println("Does it match? " + isMatch); // true
}
}
Output:
Does it match? true
ব্যাখ্যা:
a++প্যাটার্নটিaএর এক বা তার বেশি উপস্থিতি মেলায়, তবে possessive nature এর কারণে এটি একবারে ম্যাচ করে, ফিরিয়ে যায় না।
3. {n}+ (Possessive Quantifier with Fixed Number):
{n}+হল possessive quantifier যা{n}(exactlynoccurrences) এর মতো কাজ করে, তবে এটি backtracking বন্ধ করে দেয়। একবার এটিnসংখ্যক উপস্থিতি মিলালে, এটি আর পিছনে ফিরে যাবে না।
Syntax:
x{n}+
- এখানে
xএর ঠিকnবার উপস্থিতি মেলা হবে, তবে backtracking হবে না।
Example:
import java.util.regex.*;
public class PossessiveNExample {
public static void main(String[] args) {
String regex = "a{3}+"; // Possessive quantifier with exactly 3 occurrences
String text = "aaa";
Pattern pattern = Pattern.compile(regex);
Matcher matcher = pattern.matcher(text);
// Testing for match
boolean isMatch = matcher.matches();
System.out.println("Does it match? " + isMatch); // true
}
}
Output:
Does it match? true
ব্যাখ্যা:
a{3}+প্যাটার্নটি ঠিক 3টিaখুঁজে এবং একবারে মেলে, তবে এটি possessive nature এর কারণে আর backtrack করবে না।
4. {n,m}+ (Possessive Quantifier with Range):
{n,m}+হল possessive quantifier যা{n,m}(betweennandmoccurrences) এর মতো কাজ করে, তবে এটি backtracking বন্ধ করে দেয়। একবার এটিnথেকেmসংখ্যক উপস্থিতি মিলালে, এটি আর ফিরে যাবে না।
Syntax:
x{n,m}+
- এখানে
xএরnথেকেmবার উপস্থিতি মেলা হবে, তবে backtracking হবে না।
Example:
import java.util.regex.*;
public class PossessiveRangeExample {
public static void main(String[] args) {
String regex = "a{2,4}+"; // Possessive quantifier with range 2 to 4 occurrences
String text = "aaab";
Pattern pattern = Pattern.compile(regex);
Matcher matcher = pattern.matcher(text);
// Testing for match
boolean isMatch = matcher.matches();
System.out.println("Does it match? " + isMatch); // true
}
}
Output:
Does it match? true
ব্যাখ্যা:
a{2,4}+প্যাটার্নটিaএর 2 থেকে 4 বার উপস্থিতি খুঁজে, তবে possessive nature এর কারণে একবারেই মিলানো হয় এবং আর পিছনে ফিরে যাবে না।
- Possessive Quantifiers (
*+,++,{n}+,{n,m}+) হল এমন রেগুলার এক্সপ্রেশন quantifiers যা backtracking বন্ধ করে দেয় এবং এটি দ্রুত ম্যাচিং সুনিশ্চিত করে। - এগুলি সাধারণ
*,+, এবং{n,m}এর মতোই কাজ করে, তবে এই quantifiers ব্যবহার করলে এটি backtracking বন্ধ করে দেয়, যা অধিকাংশ ক্ষেত্রে স্ট্রিং ম্যাচিং দ্রুত সম্পন্ন করে।
এগুলি ব্যবহার করে আপনি আপনার রেগুলার এক্সপ্রেশন প্যাটার্নগুলো আরও দ্রুত এবং দক্ষভাবে তৈরি করতে পারেন, যেখানে backtracking এর প্রয়োজন হয় না।
Read more