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

জাভা রেজেক্সে কোয়ান্টিফায়ারের প্রকারভেদ

রেগুলার এক্সপ্রেশন তৈরি করার সময় যদি আপনি যেকোনো প্যাটার্নের ঘটনার সংখ্যা নির্দিষ্ট করতে চান, তবে কোয়ান্টিফায়ার (quantifier) ব্যবহার করতে পারেন। জাভা তিন ধরনের কোয়ান্টিফায়ার সাপোর্ট করে: Greedy (লোভী), Reluctant (অনিচ্ছাকৃত) এবং Possessive (অধিকারী) কোয়ান্টিফায়ার।

Greedy Quantifiers (লোভী কোয়ান্টিফায়ার)

Greedy কোয়ান্টিফায়ার ডিফল্ট কোয়ান্টিফায়ার। এটি ইনপুট স্ট্রিং থেকে যতটুকু সম্ভব সবচেয়ে বড় ম্যাচ খুঁজে বের করে (longest match possible)। যদি ম্যাচ না হয়, তবে এটি শেষ ক্যারেক্টারটি ছেড়ে দিয়ে আবার ম্যাচ করার চেষ্টা করে।

উদাহরণ

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

public class Test {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.println("Enter input text: ");
        String input = sc.nextLine();
        String regex = "[0-9]+";

        Pattern pattern = Pattern.compile(regex);
        Matcher matcher = pattern.matcher(input);
        System.out.println("Matched text: ");
        while (matcher.find()) {
            System.out.println(matcher.group());
        }
    }
}

আউটপুট

Enter input text: 45545
Matched text: 45545

Reluctant Quantifiers (অনিচ্ছাকৃত কোয়ান্টিফায়ার)

Reluctant বা non-greedy কোয়ান্টিফায়ার যতটুকু সম্ভব কম ম্যাচ করে। প্রাথমিকভাবে এটি প্রথম ক্যারেক্টার ম্যাচ করে; যদি ম্যাচ না হয়, তবে ইনপুট স্ট্রিং থেকে আরেকটি ক্যারেক্টার যোগ করে আবার ম্যাচ করার চেষ্টা করে। Greedy কোয়ান্টিফায়ারের পরে ? চিহ্ন দিয়ে এটি reluctant বানানো যায়।

উদাহরণ

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

public class Test {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.println("Enter input text: ");
        String input = sc.nextLine();
        String regex = "[0-9]+?";

        Pattern pattern = Pattern.compile(regex);
        Matcher matcher = pattern.matcher(input);
        while (matcher.find()) {
            System.out.println(matcher.group());
        }
    }
}

আউটপুট

Enter input text: 12345678
1
2
3
4
5
6
7
8

Possessive Quantifiers (অধিকারী কোয়ান্টিফায়ার)

Possessive কোয়ান্টিফায়ার greedy কোয়ান্টিফায়ারের মতোই কিন্তু একটু পার্থক্য আছে: এটি প্রাথমিকভাবে যতটুকু সম্ভব বেশি ক্যারেক্টার ম্যাচ করার চেষ্টা করে, এবং যদি ম্যাচ না হয়, তবে greedy কোয়ান্টিফায়ারের মতো backtrack করে না। Greedy কোয়ান্টিফায়ারের পরে + চিহ্ন দিয়ে এটি possessive বানানো যায়।

Possessive কোয়ান্টিফায়ারদের তালিকা:

  • X?+ - X, একবার বা শূন্য বার (possessive)
  • X*+ - X, শূন্য বা অধিক বার (possessive)
  • X++ - X, এক বা অধিক বার (possessive)
  • X{n}+ - X, ঠিক n বার (possessive)
  • X{n,}+ - X, কমপক্ষে n বার (possessive)
  • X{n,m}+ - X, কমপক্ষে n বার কিন্তু সর্বোচ্চ m বার (possessive)

উদাহরণ

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

public class Test {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.println("Enter input text: ");
        String input = sc.nextLine();
        String regex = "[0-9]++";

        Pattern pattern = Pattern.compile(regex);
        Matcher matcher = pattern.matcher(input);
        while (matcher.find()) {
            System.out.print(matcher.group());
            System.out.println();
        }
    }
}

আউটপুট

Enter input text: 45678
45678
  1. জাভায় Matcher pattern() মেথড উদাহরণসহ ব্যাখ্যা

  2. জাভা রেগুলার এক্সপ্রেশনে (re) সাব-এক্সপ্রেশন ব্যাখ্যা

  3. জাভা রেগেক্স দিয়ে ওয়ার্ড বাউন্ডারি ম্যাচ করা

  4. জাভাতে রেগেক্স ব্যবহার করে স্ট্রিং থেকে HTML ট্যাগ এক্সট্র্যাক্ট করা