Positive এবং Negative Lookahead এবং Lookbehind

Backreferences এবং Lookaround Assertions - জাভা রেজেক্স (Java Regex) - Java Technologies

428

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 এবং aba এর মধ্যে পার্থক্য রয়েছে এবং প্রথমটি মেলে, তবে দ্বিতীয়টি মেলেনা কারণ 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 এর তুলনা:

FeaturePositive Lookahead ((?=...))Negative Lookahead ((?!...))Positive Lookbehind ((?<=...))Negative Lookbehind ((?<!...))
PurposeChecks 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(?=...)(?!...)(?<=...)(?<!...)
Examplea(?=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 ( (?<!...) ) পূর্ববর্তী অবস্থানের চেক করে।
  • এই কনসেপ্টগুলি স্ট্রিংয়ের মধ্যে প্যাটার্নের সঠিক অবস্থান চিহ্নিত করতে অত্যন্ত শক্তিশালী টুল হিসেবে কাজ করে।
Content added By
Promotion

Are you sure to start over?

Loading...