কম্পিউটার টিউটোরিয়াল

জাভা রেগুলার এক্সপ্রেশন: ম্যাচের পজিশন ও দৈর্ঘ্য নির্ণয় (start(), end())


MatchResult ইন্টারফেস

java.util.regex.MatchResult ইন্টারফেস ম্যাচের ফলাফল রিট্রিভ করার মেথডস প্রদান করে। Matcher.toMatchResult() কল করে `MatchResult` অবজেক্ট পাওয়া যায়।

প্রধান মেথডস

  • start(): বর্তমান ম্যাচের শুরুতের ইনডেক্স (০-ভিত্তিক)।
  • end(): বর্তমান ম্যাচের শেষের পরের ইনডেক্স (এক্সক্লুসিভ)।
  • length = end() - start(): ম্যাচ করা সাবস্ট্রিংয়ের দৈর্ঘ্য।

কোড উদাহরণ: শেষ ম্যাচের পজিশন ও দৈর্ঘ্য

import java.util.Scanner;
import java.util.regex.MatchResult;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class MatchPositionExample {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.println("ইনপুট টেক্সট লিখুন: ");
        String input = sc.nextLine();
        
        String regex = "\\d+"; // এক বা অধিক ডিজিট
        Pattern pattern = Pattern.compile(regex);
        Matcher matcher = pattern.matcher(input);
        
        int start = 0, len = -1;
        
        while (matcher.find()) {
            start = matcher.start();           // ম্যাচের শুরু
            len = matcher.end() - start;       // ম্যাচের দৈর্ঘ্য
        }
        
        // MatchResult অবজেক্ট থেকে ও পাওয়া যায়
        MatchResult res = matcher.toMatchResult();
        System.out.println("MatchResult.start(): " + res.start());
        System.out.println("MatchResult.end(): " + res.end());
        System.out.println("দৈর্ঘ্য (end - start): " + (res.end() - res.start()));
        
        System.out.println("ম্যাচের পজিশন: " + start);
        System.out.println("ম্যাচের দৈর্ঘ্য: " + len);
    }
}

আউটপুট উদাহরণ

ইনপুট টেক্সট লিখুন: sample data with digits 12345
MatchResult.start(): 24
MatchResult.end(): 29
দৈর্ঘ্য (end - start): 5
ম্যাচের পজিশন: 24
ম্যাচের দৈর্ঘ্য: 5

গ্রুপ-স্পেসিফিক পজিশন (start(int group), end(int group))

যদি রেজেক্সে ক্যাপচারিং গ্রুপ থাকে, তবে নির্দিষ্ট গ্রুপের পজিশন পাওয়া যায়:

String regex = "(.*)(\\d+)(.*)"; // ৩টি গ্রুপ
Matcher matcher = pattern.matcher(input);
if (matcher.find()) {
    MatchResult res = matcher.toMatchResult();
    System.out.println("গ্রুপ ১ (ডিজিট) শুরু: " + res.start(1));
    System.out.println("গ্রুপ ১ (ডিজিট) শেষ: " + res.end(1));
    System.out.println("গ্রুপ ১ দৈর্ঘ্য: " + (res.end(1) - res.start(1)));
}

ব্যবহারিক فعلىস্পেস

  • সিনট্যাক্স হাইলাইটিং: এডিটরে ম্যাচ করা কীওয়ার্ড হাইলাইট করার জন্য পজিশন দরকার।
  • টেক্সট এডিটর: ফাইন্ড/রিপ্লেস ডায়ালগে "পজিশন ১৫-২০ এ ম্যাচ পাওয়া গেল" দেখানোর জন্য।
  • ডেটা এক্সট্রাকশন: ফিক্সড-উইডথ ফরম্যাট থেকে ফিল্ড বের করার জন্য।
  • লগ অ্যানালিসিস: টাইমস্ট্যাম্প, লেভেল, মেসেজের পজিশন জানার জন্য।

সারসংক্ষেপ

`start()` এবং `end()` মেথডগুলো ম্যাচ করা টেক্সটের সঠিক লোকেশন জানতে সাহায্য করে। `MatchResult` ইন্টারফেস এই ইনফরমেশন একটি ক্লিন API-তে প্রদান করে। দৈর্ঘ্য বের করতে সবসময় `end() - start()` ব্যবহার করুন।

  1. জাভা রেগেক্স দিয়ে দুটি এক্সপ্রেশনের যেকোনো একটি ম্যাচ করা (|)

  2. জাভা রেগেক্স দিয়ে ক্যারেক্টার রেঞ্জ ম্যাচ করা

  3. জাভা রেগেক্স দিয়ে ফিক্সড সেট অফ ক্যারেক্টার ম্যাচ করা

  4. জাভাতে length এবং length()-এর পার্থক্য কী?