Backreferences এবং Lookaround এর ব্যবহারিক উদাহরণ

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

300

Backreferences এবং Lookaround রেগুলার এক্সপ্রেশন (Regex) এর গুরুত্বপূর্ণ টুলস যা বিশেষভাবে স্ট্রিং ম্যাচিং এবং প্যাটার্ন খুঁজতে কাজে আসে। জাভা রেগুলার এক্সপ্রেশন প্যাটার্নে এই দুটি বৈশিষ্ট্য ব্যবহার করা সম্ভব। আসুন দেখি তাদের ব্যবহারিক উদাহরণ:


1. Backreferences

Backreference রেগুলার এক্সপ্রেশনে ব্যবহার হয় যখন আপনি একটি প্যাটার্নের অংশ পুনরায় রেফারেন্স করতে চান। এটি সাধারণত একটি গ্রুপ (উদাহরণস্বরূপ, কৌনিক বন্ধনী () এর মধ্যে) দ্বারা তৈরি করা হয়, এবং পরে সেই গ্রুপের ম্যাচ করা অংশকে পুনরায় রেফারেন্স করা হয়।

ব্যবহার:

  • Backreferences রেগুলার এক্সপ্রেশন ব্যবহার করে, আপনি একটি স্ট্রিংয়ে যে কোনও সাবস্ট্রিং যেখানে একই ডাটা পুনরায় এসেছে তা খুঁজে বের করতে পারেন।

ব্যবহারিক উদাহরণ:

ধরা যাক, আমরা একটি স্ট্রিং চেক করতে চাই যেখানে দুটি শব্দের মধ্যে একই শব্দ পুনরায় ব্যবহার হয়েছে।

import java.util.regex.*;

public class BackreferenceExample {
    public static void main(String[] args) {
        String regex = "(\\b\\w+\\b)\\s+\\1";  // একটি শব্দ পুনরায় আসছে
        String text1 = "Hello Hello";
        String text2 = "Hello World";
        
        // Pattern তৈরি করুন
        Pattern pattern = Pattern.compile(regex);
        
        // Matcher তৈরি করুন
        Matcher matcher1 = pattern.matcher(text1);
        Matcher matcher2 = pattern.matcher(text2);
        
        // মেলানো হচ্ছে কিনা চেক করুন
        System.out.println("Does text1 match? " + matcher1.matches());  // true
        System.out.println("Does text2 match? " + matcher2.matches());  // false
    }
}

ব্যাখ্যা:

  • "(\\b\\w+\\b)\\s+\\1": এখানে \\b\\w+\\b দিয়ে একটি শব্দ এবং \\1 দিয়ে প্রথম গ্রুপের পুনরাবৃত্তি (backreference) দেখানো হয়েছে।
  • text1 = "Hello Hello" স্ট্রিংটি প্রথম শব্দ "Hello" পুনরায় এসেছে, তাই এটি মিলে যাবে। কিন্তু text2 = "Hello World" স্ট্রিংয়ে এমন কিছু নেই, তাই এটি ম্যাচ করবে না।

আউটপুট:

Does text1 match? true
Does text2 match? false

2. Lookaround

Lookaround হল রেগুলার এক্সপ্রেশনের একটি শক্তিশালী ফিচার যা আপনাকে স্ট্রিংয়ের একটি অংশের আগে বা পরে কী হতে পারে তা চেক করতে দেয়, কিন্তু সেই অংশটি ম্যাচ করা হয় না। এতে দুটি প্রকার আছে:

  • Positive Lookahead ((?=...)): চেক করে যে একটি নির্দিষ্ট প্যাটার্ন পরবর্তীতে থাকবে কিনা।
  • Negative Lookahead ((?!...)): চেক করে যে একটি নির্দিষ্ট প্যাটার্ন পরবর্তীতে থাকবে না।
  • Positive Lookbehind ((?<=...)): চেক করে যে একটি নির্দিষ্ট প্যাটার্ন পূর্বে ছিল কিনা।
  • Negative Lookbehind ((?<!...)): চেক করে যে একটি নির্দিষ্ট প্যাটার্ন পূর্বে ছিল না।

ব্যবহারিক উদাহরণ:

ধরা যাক, আমরা একটি স্ট্রিং চেক করতে চাই যেখানে কোনও সংখ্যা ফলে আছে এবং তার পরে একটি d (ধরা যাক: "end") শব্দটি রয়েছে।

import java.util.regex.*;

public class LookaroundExample {
    public static void main(String[] args) {
        String regex = "\\d(?= end)";  // একটি সংখ্যা যা "end" শব্দের আগে থাকবে
        String text1 = "I have 5 end here";
        String text2 = "I have 5 here";
        
        // Pattern তৈরি করুন
        Pattern pattern = Pattern.compile(regex);
        
        // Matcher তৈরি করুন
        Matcher matcher1 = pattern.matcher(text1);
        Matcher matcher2 = pattern.matcher(text2);
        
        // মেলানো হচ্ছে কিনা চেক করুন
        System.out.println("Does text1 match? " + matcher1.find());  // true
        System.out.println("Does text2 match? " + matcher2.find());  // false
    }
}

ব্যাখ্যা:

  • \\d(?= end) প্যাটার্নটি চেক করে যে একটি সংখ্যা (ডিজিট) "end" শব্দের আগে আছে, কিন্তু "end" শব্দটি স্ট্রিংয়ের অংশ হিসেবে ম্যাচ হবে না, শুধু সংখ্যা ম্যাচ করবে।
  • text1 = "I have 5 end here" স্ট্রিংয়ে "5" সংখ্যা "end" এর আগে আছে, তাই এটি ম্যাচ করবে।
  • text2 = "I have 5 here" স্ট্রিংয়ে "5" এর পরে "end" নেই, তাই এটি ম্যাচ করবে না।

আউটপুট:

Does text1 match? true
Does text2 match? false

Negative Lookahead Example:

ধরা যাক, আমরা এমন একটি স্ট্রিং চেক করতে চাই যেখানে কোনও শব্দ "hello" এর পরে "world" শব্দটি না থাকে।

import java.util.regex.*;

public class LookaroundExample2 {
    public static void main(String[] args) {
        String regex = "hello(?! world)";  // hello এর পরে world না থাকা
        String text1 = "hello there";
        String text2 = "hello world";
        
        // Pattern তৈরি করুন
        Pattern pattern = Pattern.compile(regex);
        
        // Matcher তৈরি করুন
        Matcher matcher1 = pattern.matcher(text1);
        Matcher matcher2 = pattern.matcher(text2);
        
        // মেলানো হচ্ছে কিনা চেক করুন
        System.out.println("Does text1 match? " + matcher1.find());  // true
        System.out.println("Does text2 match? " + matcher2.find());  // false
    }
}

ব্যাখ্যা:

  • hello(?! world) প্যাটার্নটি "hello" শব্দের পরে "world" শব্দটি না থাকা চেক করে।
  • text1 = "hello there" স্ট্রিংয়ে "hello" শব্দের পরে "world" নেই, তাই এটি ম্যাচ করবে।
  • text2 = "hello world" স্ট্রিংয়ে "hello" শব্দের পরে "world" রয়েছে, তাই এটি ম্যাচ করবে না।

আউটপুট:

Does text1 match? true
Does text2 match? false

  1. Backreferences: আপনি যখন রেগুলার এক্সপ্রেশনে এক বা একাধিক গ্রুপ ব্যবহার করেন এবং সেই গ্রুপের একই অংশের পুনরাবৃত্তি চাইলে backreference ব্যবহার করেন। এটি স্ট্রিংয়ের মধ্যে পুনরায় একই অংশ খুঁজতে সাহায্য করে।
  2. Lookaround: এটি একটি শক্তিশালী বৈশিষ্ট্য যা স্ট্রিংয়ের একটি অংশের আগে বা পরে নির্দিষ্ট প্যাটার্ন থাকার শর্তে ম্যাচিং করতে সাহায্য করে।
    • Positive Lookahead ((?=...)): চেক করে যে কিছু পরবর্তী থাকবে।
    • Negative Lookahead ((?!...)): চেক করে যে কিছু পরবর্তী থাকবে না।
    • Positive Lookbehind ((?<=...)): চেক করে যে কিছু পূর্বে ছিল।
    • Negative Lookbehind ((?<!...)): চেক করে যে কিছু পূর্বে ছিল না।

এই সমস্ত টুলগুলি আপনাকে স্ট্রিংয়ে আরও নির্দিষ্ট এবং জটিল প্যাটার্ন খুঁজে বের করতে সাহায্য করে।

Content added By
Promotion

Are you sure to start over?

Loading...