Java Reflection প্যাকেজটি Java Regex (Regular Expressions)-এর জন্য সরাসরি ব্যবহৃত হয় না, তবে রেগুলার এক্সপ্রেশন (regex) প্যাটার্ন তৈরি করতে Pattern এবং Matcher ক্লাস ব্যবহার হয়। Positive Lookahead এবং Negative Lookahead, Positive Lookbehind এবং Negative Lookbehind হল জাভা রেগুলার এক্সপ্রেশনের গুরুত্বপূর্ণ কনসেপ্ট, যা স্ট্রিংয়ের ভিতরে একটি নির্দিষ্ট প্যাটার্নের উপস্থিতি বা অনুপস্থিতি চিহ্নিত করতে ব্যবহৃত হয়। এগুলি রেগুলার এক্সপ্রেশন প্যাটার্নের জন্য assertion হিসেবে কাজ করে, যা নির্দিষ্ট প্যাটার্নের আগে বা পরে কোনো কিছু থাকা প্রয়োজন বা নিষিদ্ধ কিনা তা পরীক্ষা করে।
1. Positive Lookahead ((?=...)):
Positive Lookahead চেক করে যে একটি নির্দিষ্ট প্যাটার্ন একটি নির্দিষ্ট অবস্থানের পরে উপস্থিত রয়েছে কিনা, কিন্তু এটি সেই প্যাটার্নকে ম্যাচ হিসেবে অন্তর্ভুক্ত করে না। এটি "ahead" (পরে) চেক করে এবং প্যাটার্নটি মেলানোর জন্য অবশ্যই ঐ অবস্থানে উপস্থিত থাকতে হবে।
ব্যবহার:
(?=...) // Positive Lookahead
উদাহরণ:
import java.util.regex.*;
public class PositiveLookaheadExample {
public static void main(String[] args) {
Pattern pattern = Pattern.compile("a(?=b)");
Matcher matcher = pattern.matcher("abc");
// find() মেথড ব্যবহার
while (matcher.find()) {
System.out.println("Match found at index: " + matcher.start());
}
}
}
Output:
Match found at index: 0
ব্যাখ্যা:
a(?=b)প্যাটার্নটিaকে খুঁজে, তবে শুধুমাত্র তখনই মেলে যখন তার পরবর্তী চরিত্রbথাকে। এখানেaএবংbএকসাথে মেলানো হচ্ছে, কিন্তুbপ্যাটার্নের অংশ হিসেবে গণ্য হচ্ছে না।
2. Negative Lookahead ((?!...)):
Negative Lookahead চেক করে যে একটি নির্দিষ্ট প্যাটার্ন একটি নির্দিষ্ট অবস্থানের পরে উপস্থিত না থাকে, এটি নিশ্চিত করে যে সেই অবস্থানের পরে প্যাটার্নটি থাকবে না। এটি "ahead" (পরে) চেক করে এবং যদি প্যাটার্নটি সেখানে না থাকে, তবে ম্যাচ সফল হয়।
ব্যবহার:
(?!...) // Negative Lookahead
উদাহরণ:
import java.util.regex.*;
public class NegativeLookaheadExample {
public static void main(String[] args) {
Pattern pattern = Pattern.compile("a(?!b)");
Matcher matcher = pattern.matcher("ac abc ab");
// find() মেথড ব্যবহার
while (matcher.find()) {
System.out.println("Match found at index: " + matcher.start());
}
}
}
Output:
Match found at index: 0
Match found at index: 3
ব্যাখ্যা:
a(?!b)প্যাটার্নটিaকে খুঁজে এবং মেলে না যদি তার পরেbথাকে।acএবংabএaএর মধ্যে পার্থক্য রয়েছে এবং প্রথমটি মেলে, তবে দ্বিতীয়টি মেলেনা কারণab-এর পরbরয়েছে।
3. Positive Lookbehind ((?<=...)):
Positive Lookbehind চেক করে যে একটি নির্দিষ্ট প্যাটার্ন একটি নির্দিষ্ট অবস্থানের আগে উপস্থিত রয়েছে কিনা, কিন্তু এটি সেই প্যাটার্নকে ম্যাচ হিসেবে অন্তর্ভুক্ত করে না। এটি "behind" (আগে) চেক করে এবং প্যাটার্নটি মেলানোর জন্য অবশ্যই ঐ অবস্থানের আগে উপস্থিত থাকতে হবে।
ব্যবহার:
(?<=...) // Positive Lookbehind
উদাহরণ:
import java.util.regex.*;
public class PositiveLookbehindExample {
public static void main(String[] args) {
Pattern pattern = Pattern.compile("(?<=a)b");
Matcher matcher = pattern.matcher("ab acb abc");
// find() মেথড ব্যবহার
while (matcher.find()) {
System.out.println("Match found at index: " + matcher.start());
}
}
}
Output:
Match found at index: 1
Match found at index: 4
ব্যাখ্যা:
(?<=a)bপ্যাটার্নটিbকে খুঁজে, তবে শুধুমাত্র যখন তার আগেaথাকে। প্রথম এবং দ্বিতীয়b-এর আগেaরয়েছে, তাই মেলে।
4. Negative Lookbehind ((?<!...)):
Negative Lookbehind চেক করে যে একটি নির্দিষ্ট প্যাটার্ন একটি নির্দিষ্ট অবস্থানের আগে উপস্থিত না থাকে, এটি নিশ্চিত করে যে সেই অবস্থানের আগে প্যাটার্নটি থাকবে না। এটি "behind" (আগে) চেক করে এবং যদি প্যাটার্নটি সেখানে না থাকে, তবে ম্যাচ সফল হয়।
ব্যবহার:
(?<!...) // Negative Lookbehind
উদাহরণ:
import java.util.regex.*;
public class NegativeLookbehindExample {
public static void main(String[] args) {
Pattern pattern = Pattern.compile("(?<!a)b");
Matcher matcher = pattern.matcher("ab acb abc");
// find() মেথড ব্যবহার
while (matcher.find()) {
System.out.println("Match found at index: " + matcher.start());
}
}
}
Output:
Match found at index: 4
ব্যাখ্যা:
(?<!a)bপ্যাটার্নটিbকে খুঁজে, তবে শুধুমাত্র যখন তার আগেaনা থাকে। দ্বিতীয়bমেলে, কারণ এর আগেaনেই, কিন্তু প্রথমbমেলেনা কারণ তার আগেaরয়েছে।
Lookahead এবং Lookbehind এর তুলনা:
| Feature | Positive Lookahead ((?=...)) | Negative Lookahead ((?!...)) | Positive Lookbehind ((?<=...)) | Negative Lookbehind ((?<!...)) |
|---|---|---|---|---|
| Purpose | Checks if a pattern exists ahead of the current position. | Checks if a pattern does not exist ahead of the current position. | Checks if a pattern exists before the current position. | Checks if a pattern does not exist before the current position. |
| Syntax | (?=...) | (?!...) | (?<=...) | (?<!...) |
| Example | a(?=b) matches a only if it is followed by b. | a(?!b) matches a only if it is not followed by b. | (?<=a)b matches b only if it is preceded by a. | (?<!a)b matches b only if it is not preceded by a. |
- Lookahead এবং Lookbehind রেগুলার এক্সপ্রেশনে বিশেষভাবে assertion হিসেবে ব্যবহৃত হয়, যা স্ট্রিংয়ের ভিতরে কিছু প্যাটার্নের উপস্থিতি বা অনুপস্থিতি চিহ্নিত করে।
- Positive Lookahead (
(?=...)) এবং Negative Lookahead ((?!...)) পরবর্তী অবস্থানের চেক করে। - Positive Lookbehind (
(?<=...)) এবং Negative Lookbehind ((?<!...)) পূর্ববর্তী অবস্থানের চেক করে। - এই কনসেপ্টগুলি স্ট্রিংয়ের মধ্যে প্যাটার্নের সঠিক অবস্থান চিহ্নিত করতে অত্যন্ত শক্তিশালী টুল হিসেবে কাজ করে।
Read more