Java Regex (Regular Expressions) হলো একটি শক্তিশালী টুল যা টেক্সট প্যাটার্ন ম্যাচিং এবং প্রক্রিয়া করার জন্য ব্যবহৃত হয়। এটি সাধারণত Pattern matching, String validation, Text searching, Text replacement, Data extraction ইত্যাদি কাজের জন্য ব্যবহৃত হয়। Java তে regex ব্যবহারের জন্য মূলত java.util.regex প্যাকেজটি ব্যবহৃত হয়, যা দুটি প্রধান ক্লাস প্রদান করে: Pattern এবং Matcher।
Java Regex - Pattern Matching এবং Matcher ক্লাস
- Pattern Class:
Patternক্লাসটি একটি কম্পাইলড রেগুলার এক্সপ্রেশন প্রতিনিধিত্ব করে।Patternক্লাসেরcompile()মেথড দিয়ে একটি রেগুলার এক্সপ্রেশন কম্পাইল করা হয়।
- Matcher Class:
Matcherক্লাসটি একটি ইনস্ট্যান্স তৈরি করে এবং এতে প্যাটার্নটি কোনো স্ট্রিং বা ইনপুটের সাথে মিলিয়ে দেখা হয়।- এটি
matches(),find(),replaceAll()ইত্যাদি মেথড দিয়ে বিভিন্ন টেক্সট প্রসেসিং কাজ করতে সাহায্য করে।
Java Regex-এর প্রধান উপাদান
- Literal Characters: সাধারণ অক্ষর (যেমন
a,b,1,@, ইত্যাদি) যা আপনার স্ট্রিং প্যাটার্নে ব্যবহার হয়। - Meta-characters: বিশেষ চিহ্ন যা রেগুলার এক্সপ্রেশন তৈরি করতে ব্যবহৃত হয়, যেমন:
.(dot): যেকোনো একক অক্ষর^: স্ট্রিং এর শুরুর দিকে প্যাটার্ন ম্যাচিং$: স্ট্রিং এর শেষে প্যাটার্ন ম্যাচিং*: পূর্ববর্তী চরিত্রের শূন্য বা অধিক উপস্থিতি+: পূর্ববর্তী চরিত্রের এক বা অধিক উপস্থিতি?: পূর্ববর্তী চরিত্রের শূন্য বা এক উপস্থিতি[]: একটি নির্দিষ্ট চরিত্র সেট|: অথবা (OR) অপারেটর(): গ্রুপিং (গ্রুপ হিসাবে একাধিক অংশকে একসাথে গ্রুপ করা)
Java Regex ব্যবহার করার উদাহরণ
1. Basic Pattern Matching
import java.util.regex.*;
public class RegexExample {
public static void main(String[] args) {
String text = "Hello World!";
// Pattern তৈরি
Pattern pattern = Pattern.compile("Hello");
// Matcher তৈরি
Matcher matcher = pattern.matcher(text);
// প্যাটার্ন মেলানো
if (matcher.find()) {
System.out.println("Match found!");
} else {
System.out.println("No match found.");
}
}
}
ব্যাখ্যা:
Pattern.compile("Hello"): "Hello" প্যাটার্ন কম্পাইল করা হয়।matcher.find(): টেক্সটের মধ্যে "Hello" প্যাটার্নটি খোঁজা হয়। যদি মেলে, "Match found!" প্রিন্ট হবে।
2. Matching Email Address
import java.util.regex.*;
public class RegexExample {
public static void main(String[] args) {
String email = "test@example.com";
// Email এর জন্য regex pattern
String regex = "^[a-zA-Z0-9_+&*-]+(?:\\.[a-zA-Z0-9_+&*-]+)*@(?:[a-zA-Z0-9-]+\\.)+[a-zA-Z]{2,7}$";
// Pattern তৈরি
Pattern pattern = Pattern.compile(regex);
// Matcher তৈরি
Matcher matcher = pattern.matcher(email);
if (matcher.matches()) {
System.out.println("Valid email address.");
} else {
System.out.println("Invalid email address.");
}
}
}
ব্যাখ্যা:
- এখানে একটি ইমেল ঠিকানা যাচাই করা হচ্ছে, যাতে এটি valid email ফরম্যাটে থাকে।
matches()মেথডটি স্ট্রিংটির পুরোটা প্যাটার্নের সাথে মেলানোর জন্য ব্যবহৃত হয়।
3. Extracting Data Using Groups
import java.util.regex.*;
public class RegexExample {
public static void main(String[] args) {
String text = "John Doe, Age: 30";
// Name এবং Age বের করার জন্য regex pattern
String regex = "(\\w+ \\w+), Age: (\\d+)";
// Pattern তৈরি
Pattern pattern = Pattern.compile(regex);
// Matcher তৈরি
Matcher matcher = pattern.matcher(text);
if (matcher.find()) {
// Group 1 - Name, Group 2 - Age
System.out.println("Name: " + matcher.group(1));
System.out.println("Age: " + matcher.group(2));
} else {
System.out.println("No match found.");
}
}
}
ব্যাখ্যা:
- এখানে name এবং age ডাটা এক্সট্রাক্ট করা হচ্ছে।
()ব্যবহার করে গ্রুপিং করা হয়েছে, এবংgroup(1)ওgroup(2)এর মাধ্যমে গ্রুপগুলো অ্যাক্সেস করা হয়েছে।
4. Replacing Text
import java.util.regex.*;
public class RegexExample {
public static void main(String[] args) {
String text = "The sky is blue. The ocean is blue.";
// "blue" শব্দটি "green"-এ রুপান্তর করা
String regex = "blue";
String replacement = "green";
// Pattern তৈরি
Pattern pattern = Pattern.compile(regex);
// Matcher তৈরি
Matcher matcher = pattern.matcher(text);
// Text পরিবর্তন করা
String updatedText = matcher.replaceAll(replacement);
System.out.println(updatedText);
}
}
ব্যাখ্যা:
replaceAll()মেথড ব্যবহার করে "blue" শব্দটি "green" দিয়ে প্রতিস্থাপিত করা হয়েছে।
5. Splitting String Using Regex
import java.util.regex.*;
public class RegexExample {
public static void main(String[] args) {
String text = "apple,banana,orange";
// কমা দ্বারা বিভক্ত করা
String regex = ",";
// Pattern তৈরি
Pattern pattern = Pattern.compile(regex);
// String split করা
String[] fruits = pattern.split(text);
// ফলাফল প্রিন্ট করা
for (String fruit : fruits) {
System.out.println(fruit);
}
}
}
ব্যাখ্যা:
split()মেথড ব্যবহার করে কমা (,) দিয়ে স্ট্রিংটি বিভক্ত করা হয়েছে।
Regex-এর সাধারণ ব্যবহার
- Pattern Validation: ফোন নম্বর, ইমেল ঠিকানা, পিন কোড, ক্রেডিট কার্ড নম্বর ইত্যাদি যাচাই করা।
- Text Parsing: ডেটা এক্সট্রাকশন যেমন টেক্সট থেকে নাম, ঠিকানা, বা বয়স বের করা।
- Text Replacement: টেক্সট পরিবর্তন বা প্রতিস্থাপন যেমন সঠিক ফরম্যাটে ডেটা প্রক্রিয়া করা।
- Data Cleaning: অবাঞ্ছিত ক্যারেক্টার বা স্পেস সরানো।
Regex Performance Considerations
- Efficiency: Regex চালানোর সময় অপ্টিমাইজড এবং প্রপার প্যাটার্ন ব্যবহার করা উচিত। জটিল রেগুলার এক্সপ্রেশন পারফরম্যান্সে প্রভাব ফেলতে পারে।
- Backtracking: অতিরিক্ত বা ভুল প্যাটার্নের কারণে ব্যাকট্র্যাকিং হতে পারে, যা পারফরম্যান্স হ্রাস করতে পারে।
- Precompiling: যদি একই রেগুলার এক্সপ্রেশন বারবার ব্যবহার হয়, তবে একে কম্পাইল করে
Patternঅবজেক্টে স্টোর করা উচিত।
Java তে Regex একটি শক্তিশালী টুল যা টেক্সটের প্যাটার্ন মেলানো, সার্চিং, রিপ্লেসিং, এবং ডাটা এক্সট্রাকশন করার জন্য ব্যবহৃত হয়। Pattern এবং Matcher ক্লাসের মাধ্যমে রেগুলার এক্সপ্রেশন খুবই সহজে ব্যবহার করা যায়। Java Regex-এর সাহায্যে আপনি বিভিন্ন ধরনের টেক্সট ভ্যালিডেশন, প্যাটার্ন ম্যাচিং এবং ডাটা ম্যানিপুলেশন কার্য করতে পারবেন।
Java Regex (Regular Expressions) ব্যবহার করে আপনি স্ট্রিংয়ের মধ্যে একটি নির্দিষ্ট প্যাটার্ন বা নিয়ম অনুসারে অনুসন্ধান (search), পরিবর্তন (replace), অথবা সঠিকতা যাচাই (validation) করতে পারেন। Pattern এবং Matcher ক্লাস দুটি গুরুত্বপূর্ণ উপাদান, যা Java-তে রেগুলার এক্সপ্রেশন (regex) এর কার্যকারিতা প্রদান করে।
১. Pattern ক্লাস:
Pattern ক্লাসটি একটি কম্পাইল করা রেগুলার এক্সপ্রেশন রিপ্রেজেন্টেশন, যা স্ট্রিং প্যাটার্নের সাথে মেলানোর জন্য ব্যবহৃত হয়। এটি java.util.regex প্যাকেজে অন্তর্ভুক্ত এবং এটি রেগুলার এক্সপ্রেশন কম্পাইল ও কনফিগার করতে সাহায্য করে।
Pattern ক্লাসের কিছু গুরুত্বপূর্ণ মেথড:
compile(String regex): এই মেথডটি একটি স্ট্রিং প্যাটার্ন নেয় এবং সেই প্যাটার্ন থেকে একটিPatternঅবজেক্ট তৈরি করে।compile(String regex, int flags): এটি রেগুলার এক্সপ্রেশন এবং ফ্ল্যাগ নেয়, যা প্যাটার্নের আচরণ নিয়ন্ত্রণ করতে সাহায্য করে (যেমন, case-insensitive matching)।matcher(CharSequence input): এই মেথডটি একটি ইনপুট স্ট্রিংয়ের সাথে প্যাটার্ন ম্যাচ করতে একটিMatcherঅবজেক্ট তৈরি করে।
উদাহরণ: Pattern ক্লাস ব্যবহার
import java.util.regex.*;
public class PatternExample {
public static void main(String[] args) {
// Pattern তৈরি করা
Pattern pattern = Pattern.compile("a*b");
// Matcher তৈরি করা
Matcher matcher = pattern.matcher("aaab");
// মেলানো হচ্ছে
boolean matchFound = matcher.matches();
System.out.println("Match found: " + matchFound); // Output: Match found: true
}
}
ব্যাখ্যা:
Pattern.compile("a*b")— এই রেগুলার এক্সপ্রেশনটি বলে যে স্ট্রিংয়ের মধ্যেaশূন্য বা একাধিক বার থাকতে পারে এবং তারপরে একটিbথাকতে হবে।matcher.matches()— এটি স্ট্রিংটি প্যাটার্নের সাথে পুরোপুরি মেলে কিনা তা পরীক্ষা করে।
২. Matcher ক্লাস:
Matcher ক্লাসটি একটি ইনপুট স্ট্রিংয়ের সাথে Pattern ক্লাসের প্যাটার্ন মেলানোর জন্য ব্যবহৃত হয়। এটি একটি Pattern অবজেক্ট থেকে তৈরি হয় এবং স্ট্রিংয়ের মধ্যে প্যাটার্ন খোঁজার বিভিন্ন কার্যকলাপ (methods) প্রদান করে।
Matcher ক্লাসের কিছু গুরুত্বপূর্ণ মেথড:
matches(): এটি ইনপুট স্ট্রিংয়ের পুরো অংশের সাথে প্যাটার্ন মেলে কিনা তা পরীক্ষা করে।find(): এটি স্ট্রিংয়ের মধ্যে প্যাটার্নটির একটি বা একাধিক ইনস্ট্যান্স খুঁজে বের করে।find()মেথডটি প্রতিবার কল করার পর প্যাটার্নের পরবর্তী ম্যাচটি খুঁজে বের করে।group(): এটি খুঁজে পাওয়া ম্যাচের অংশ ফেরত দেয়।replaceAll(String replacement): এটি প্যাটার্নের সব ম্যাচকে একটি নতুন স্ট্রিং দ্বারা প্রতিস্থাপন করে।
উদাহরণ: Matcher ক্লাস ব্যবহার
import java.util.regex.*;
public class MatcherExample {
public static void main(String[] args) {
// Pattern তৈরি করা
Pattern pattern = Pattern.compile("\\d+"); // ডিজিটের একটি প্যাটার্ন
// Matcher তৈরি করা
Matcher matcher = pattern.matcher("The price is 100 dollars");
// find() মেথড ব্যবহার করে প্যাটার্ন খোঁজা
while (matcher.find()) {
System.out.println("Found match: " + matcher.group());
}
}
}
Output:
Found match: 100
ব্যাখ্যা:
Pattern.compile("\\d+"): এই প্যাটার্নটি সমস্ত ডিজিট (0-9) এর এক বা একাধিক আক্ষরিক মান খুঁজে।matcher.find(): এটি ইনপুট স্ট্রিংয়ের মধ্যে প্যাটার্নের মেলানো অংশ খুঁজে বের করে এবং পরবর্তী ম্যাচ পেতেfind()বার বার কল করা যেতে পারে।matcher.group(): এটি খুঁজে পাওয়া ম্যাচটি ফেরত দেয়।
৩. Pattern এবং Matcher ক্লাসের মধ্যে সম্পর্ক:
- Pattern: এটি একটি রেগুলার এক্সপ্রেশন প্যাটার্নের কম্পাইল্ড রূপ যা Matcher ক্লাসের সাহায্যে ইনপুট স্ট্রিংয়ের সাথে মেলানোর জন্য ব্যবহৃত হয়।
- Matcher: এটি Pattern অবজেক্টের সাথে কাজ করে এবং ইনপুট স্ট্রিংয়ের মধ্যে প্যাটার্ন খোঁজে এবং মেলে কিনা তা পরীক্ষা করে।
৪. Pattern Flags:
Pattern ক্লাসের সাথে ফ্ল্যাগ ব্যবহার করে আপনি প্যাটার্নের আচরণ পরিবর্তন করতে পারেন। কিছু সাধারণ ফ্ল্যাগ:
Pattern.CASE_INSENSITIVE: প্যাটার্নে case-insensitive ম্যাচিং সক্ষম করে।Pattern.DOTALL: ডট (.) মেটা ক্যারেক্টারকে সমস্ত অক্ষরের জন্য (এমনকি newline) ম্যাচ করতে সক্ষম করে।Pattern.MULTILINE: এই ফ্ল্যাগটি স্ট্রিংয়ের শুরু এবং শেষের মধ্যে^এবং$মেটা ক্যারেক্টারের আচরণ পরিবর্তন করে।
উদাহরণ: Pattern Flags ব্যবহার
import java.util.regex.*;
public class PatternFlagsExample {
public static void main(String[] args) {
// CASE_INSENSITIVE ফ্ল্যাগ দিয়ে Pattern তৈরি
Pattern pattern = Pattern.compile("hello", Pattern.CASE_INSENSITIVE);
// Matcher তৈরি করা
Matcher matcher = pattern.matcher("HeLLo");
// match() মেথড ব্যবহার
boolean matchFound = matcher.matches();
System.out.println("Match found: " + matchFound); // Output: Match found: true
}
}
৫. Advanced Example: Replace All Occurrences:
import java.util.regex.*;
public class ReplaceAllExample {
public static void main(String[] args) {
// Pattern তৈরি করা
Pattern pattern = Pattern.compile("\\d+");
// Matcher তৈরি করা
Matcher matcher = pattern.matcher("I have 100 apples and 200 bananas.");
// সমস্ত ডিজিটের অবস্থান পরিবর্তন করা
String replacedString = matcher.replaceAll("X");
System.out.println(replacedString); // Output: I have X apples and X bananas.
}
}
- Pattern এবং Matcher ক্লাস Java Regex-এর মৌলিক উপাদান। Pattern ক্লাস রেগুলার এক্সপ্রেশন প্যাটার্নের কম্পাইলড রূপ প্রদান করে, এবং Matcher ক্লাস সেই প্যাটার্নের সাহায্যে স্ট্রিংয়ের সাথে মেলানোর কাজ করে।
- Pattern.compile() দিয়ে প্যাটার্ন তৈরি করা হয় এবং Matcher দিয়ে সেই প্যাটার্নের মেলানো অংশ বা পরিবর্তন করা যায়।
- Regex কার্যকরভাবে স্ট্রিং প্রক্রিয়াকরণে ব্যবহার করা হয়, যেমন ফাইল নাম চেক করা, ইনপুট ভ্যালিডেশন, এবং স্ট্রিং রূপান্তর।
Regex (Regular Expression) জাভাতে একটি শক্তিশালী টুল, যা স্ট্রিং ম্যানিপুলেশন এবং প্যাটার্ন ম্যাচিংয়ের জন্য ব্যবহৃত হয়। Java Regular Expressions প্যাকেজে Pattern এবং Matcher ক্লাসের মাধ্যমে আমরা সহজে এবং কার্যকরভাবে স্ট্রিং নিয়ে কাজ করতে পারি।
Pattern.compile() মেথড:
Pattern.compile() মেথডটি একটি স্ট্রিং বা রেগুলার এক্সপ্রেশন প্যাটার্নকে Pattern অবজেক্টে রূপান্তরিত করে। এই প্যাটার্নটি পরবর্তীতে Matcher অবজেক্টের মাধ্যমে স্ট্রিংয়ের সাথে মেলানো হয়।
সিনট্যাক্স:
Pattern pattern = Pattern.compile(String regex);
এখানে:
regex: এটি রেগুলার এক্সপ্রেশন প্যাটার্ন হিসেবে একটি স্ট্রিং।pattern: এটিPatternঅবজেক্ট যা পরবর্তীতে Matcher অবজেক্টের মাধ্যমে ব্যবহার করা যাবে।
compile() মেথডের দুটি ভিন্ন ভেরিয়েন্ট রয়েছে:
- Pattern.compile(String regex): একটি সাধারণ রেগুলার এক্সপ্রেশন প্যাটার্ন কম্পাইল করতে ব্যবহৃত হয়।
- Pattern.compile(String regex, int flags): এটি রেগুলার এক্সপ্রেশন প্যাটার্ন এবং ফ্ল্যাগস (যেমন
CASE_INSENSITIVE,MULTILINEইত্যাদি) গ্রহণ করে।
Matcher মেথড:
Matcher ক্লাসটি একটি স্ট্রিং এর সাথে Pattern মেলানোর জন্য ব্যবহৃত হয়। এটি বিভিন্ন মেথড প্রদান করে যা স্ট্রিং এর সাথে রেগুলার এক্সপ্রেশন মেলাতে সাহায্য করে।
Matcher ক্লাসের কিছু গুরুত্বপূর্ণ মেথড:
matches():
- এটি স্ট্রিং এর পুরোটা রেগুলার এক্সপ্রেশন এর সাথে মেলে কিনা তা চেক করে।
সিনট্যাক্স:
boolean matches = matcher.matches();ব্যবহার:
Pattern pattern = Pattern.compile("abc"); Matcher matcher = pattern.matcher("abc"); boolean isMatch = matcher.matches(); // returns truefind():
- এটি স্ট্রিং এর মধ্যে রেগুলার এক্সপ্রেশন প্যাটার্নটি খুঁজে বের করে। এটি এক বা একাধিক ম্যাচিং সাবস্ট্রিং খুঁজে বের করার জন্য ব্যবহার করা হয়।
সিনট্যাক্স:
boolean find = matcher.find();group():
- এটি স্ট্রিং এর মধ্যে প্রথম ম্যাচ করা সাবস্ট্রিং রিটার্ন করে।
সিনট্যাক্স:
String matchedGroup = matcher.group();replaceAll():
- এটি স্ট্রিং এর সবগুলো ম্যাচিং সাবস্ট্রিং রিপ্লেস করে।
সিনট্যাক্স:
String result = matcher.replaceAll(String replacement);start() এবং end():
start()মেথডটি ম্যাচিং সাবস্ট্রিং এর শুরু পজিশন এবংend()মেথডটি শেষ পজিশন রিটার্ন করে।
সিনট্যাক্স:
int start = matcher.start(); int end = matcher.end();
উদাহরণ: Pattern.compile() এবং Matcher মেথডের ব্যবহার
এখন, আসুন কিছু উদাহরণ দেখি যেখানে আমরা Pattern.compile() এবং Matcher মেথড ব্যবহার করব।
উদাহরণ ১: match() মেথড ব্যবহার
import java.util.regex.*;
public class RegexExample {
public static void main(String[] args) {
String regex = "hello";
String text = "hello world";
// Pattern তৈরি করুন
Pattern pattern = Pattern.compile(regex);
// Matcher তৈরি করুন
Matcher matcher = pattern.matcher(text);
// পুরো স্ট্রিং মেলানো হচ্ছে কিনা পরীক্ষা করুন
boolean isMatch = matcher.matches();
System.out.println("Does the text match the regex? " + isMatch); // false
}
}
ব্যাখ্যা:
- এখানে
matches()মেথডটি চেক করে যে পুরোtextস্ট্রিংটিregexপ্যাটার্নের সাথে মেলে কিনা। কারণ পুরোtextস্ট্রিংটি "hello world" এবং "hello" রেগুলার এক্সপ্রেশনটির সাথে পুরোপুরি মেলে না, তাই আউটপুটfalseহবে।
উদাহরণ ২: find() মেথড ব্যবহার
import java.util.regex.*;
public class RegexExample {
public static void main(String[] args) {
String regex = "world";
String text = "hello world";
// Pattern তৈরি করুন
Pattern pattern = Pattern.compile(regex);
// Matcher তৈরি করুন
Matcher matcher = pattern.matcher(text);
// স্ট্রিংয়ে প্যাটার্ন খুঁজুন
boolean isFound = matcher.find();
System.out.println("Pattern found: " + isFound); // true
}
}
ব্যাখ্যা:
- এখানে
find()মেথডটি স্ট্রিংয়ের মধ্যে "world" প্যাটার্নটি খুঁজে পাচ্ছে, তাই আউটপুটtrueহবে।
উদাহরণ ৩: group() এবং start() / end() মেথড ব্যবহার
import java.util.regex.*;
public class RegexExample {
public static void main(String[] args) {
String regex = "(\\d+)";
String text = "There are 123 apples";
// Pattern তৈরি করুন
Pattern pattern = Pattern.compile(regex);
// Matcher তৈরি করুন
Matcher matcher = pattern.matcher(text);
// find() মেথড ব্যবহার করে ম্যাচ খুঁজুন
if (matcher.find()) {
System.out.println("Matched number: " + matcher.group()); // 123
System.out.println("Start position: " + matcher.start()); // 10
System.out.println("End position: " + matcher.end()); // 13
}
}
}
ব্যাখ্যা:
- এখানে
group()মেথডটি প্রথম ম্যাচ করা সংখ্যা (123) রিটার্ন করবে। start()এবংend()মেথডগুলি ম্যাচের শুরু এবং শেষ পজিশন দেখাবে।
উদাহরণ ৪: replaceAll() মেথড ব্যবহার
import java.util.regex.*;
public class RegexExample {
public static void main(String[] args) {
String regex = "apple";
String text = "apple orange apple banana apple";
// Pattern তৈরি করুন
Pattern pattern = Pattern.compile(regex);
// Matcher তৈরি করুন
Matcher matcher = pattern.matcher(text);
// সবগুলো "apple" রিপ্লেস করুন
String result = matcher.replaceAll("fruit");
System.out.println("Updated text: " + result); // fruit orange fruit banana fruit
}
}
ব্যাখ্যা:
- এখানে
replaceAll()মেথডটি স্ট্রিংয়ে সব "apple" সাবস্ট্রিংগুলোকে "fruit"-এ রিপ্লেস করে।
- Pattern.compile(): এটি একটি রেগুলার এক্সপ্রেশন প্যাটার্নকে কম্পাইল করে এবং একটি
Patternঅবজেক্ট তৈরি করে যা পরবর্তী সময়েMatcherক্লাসের মাধ্যমে ব্যবহার করা যায়। - Matcher: এটি স্ট্রিংয়ের সাথে
Patternমেলানোর জন্য ব্যবহৃত হয় এবং বিভিন্ন মেথডের মাধ্যমে স্ট্রিংয়ের মধ্যে প্যাটার্ন খোঁজা, প্রক্রিয়া করা, রিপ্লেস করা ইত্যাদি কাজ করতে পারে।
Regex জাভায় স্ট্রিং ম্যাচিং, ফিল্টারিং, বা প্যাটার্ন চেকিং এর জন্য অত্যন্ত গুরুত্বপূর্ণ টুল, এবং এটি Pattern ও Matcher ক্লাসের মাধ্যমে কার্যকরভাবে পরিচালিত হতে পারে।
Java Regular Expressions (Regex) একটি শক্তিশালী টুল যা স্ট্রিং ডেটা থেকে নির্দিষ্ট প্যাটার্ন ম্যাচ করার জন্য ব্যবহৃত হয়। Regex ব্যবহার করে আপনি স্ট্রিং এর মধ্যে নির্দিষ্ট প্যাটার্ন অনুসন্ধান করতে, সেটি প্রতিস্থাপন করতে, এবং মান যাচাই করতে পারেন।
Java তে Regex ব্যবহারের জন্য java.util.regex প্যাকেজটি ব্যবহৃত হয়। এই প্যাকেজে মূলত তিনটি ক্লাস ব্যবহৃত হয়:
- Pattern: এটি Regex প্যাটার্ন সংরক্ষণ এবং কন্সট্রাক্ট করার জন্য ব্যবহৃত হয়।
- Matcher: এটি Regex প্যাটার্নের সাথে স্ট্রিং মিলিয়ে দেখতে ব্যবহৃত হয়।
- PatternSyntaxException: এটি Regex এর সিনট্যাক্স ত্রুটি চিহ্নিত করতে ব্যবহৃত হয়।
Java Regex Pattern তৈরি করা
Java তে Regex Pattern তৈরি করার জন্য Pattern.compile() মেথড ব্যবহার করা হয়। এখানে Regex প্যাটার্ন একটি স্ট্রিং আকারে দেওয়া হয় এবং এটি একটি Pattern অবজেক্টে রূপান্তরিত হয়।
সাধারণ Regex Pattern তৈরি করার উদাহরণ
- ধরা যাক, আমাদের একটি প্যাটার্ন তৈরি করতে হবে যা একটি সঠিক ইমেইল ঠিকানা চেক করবে।
Regex Pattern:
^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$
Explanation:
^: প্যাটার্নের শুরু।[a-zA-Z0-9._%+-]+: ইমেইল এর প্রথম অংশ (যেখানে এক বা একাধিক অক্ষর থাকতে পারে, যা ছোট বা বড় হাতের অক্ষর, সংখ্যা, ডট, আন্ডারস্কোর, পার্সেন্টেজ, প্লাস, বা হাইফেন হতে পারে)।@: "@" চিহ্ন।[a-zA-Z0-9.-]+: ডোমেইন নাম (যেখানে ছোট বা বড় হাতের অক্ষর, সংখ্যা, ডট বা হাইফেন থাকতে পারে)।\.: ডট (ইমেইল সঠিকভাবে চেক করার জন্য ডট ব্যবহার করা হয়েছে)।[a-zA-Z]{2,}: ডোমেইন এক্সটেনশন (যেমন.com,.orgইত্যাদি)।$: প্যাটার্নের শেষ।
Java কোড উদাহরণ:
import java.util.regex.*;
public class RegexExample {
public static void main(String[] args) {
String email = "example@email.com";
// ইমেইল প্যাটার্ন তৈরি
String emailPattern = "^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,}$";
// প্যাটার্ন কম্পাইল করা
Pattern pattern = Pattern.compile(emailPattern);
// Matcher ব্যবহার করে ইমেইল স্ট্রিং চেক করা
Matcher matcher = pattern.matcher(email);
// ইমেইল প্যাটার্ন মিললে True, না হলে False
if (matcher.matches()) {
System.out.println("Valid email address.");
} else {
System.out.println("Invalid email address.");
}
}
}
আউটপুট:
Valid email address.
2. সিম্পল ফোন নাম্বার চেকিং Regex
Regex Pattern:
^\d{10}$
Explanation:
^: প্যাটার্নের শুরু।\d{10}: ১০টি ডিজিটের একটি সিরিজ।$: প্যাটার্নের শেষ।
এটি ১০ ডিজিটের একটি ফোন নম্বর যাচাই করবে (যেমন 1234567890)।
Java কোড উদাহরণ:
import java.util.regex.*;
public class PhoneNumberValidation {
public static void main(String[] args) {
String phoneNumber = "1234567890";
// ফোন নম্বর প্যাটার্ন তৈরি
String phonePattern = "^\\d{10}$";
// প্যাটার্ন কম্পাইল করা
Pattern pattern = Pattern.compile(phonePattern);
// Matcher ব্যবহার করে ফোন নম্বর চেক করা
Matcher matcher = pattern.matcher(phoneNumber);
// ফোন নম্বর প্যাটার্ন মিললে True, না হলে False
if (matcher.matches()) {
System.out.println("Valid phone number.");
} else {
System.out.println("Invalid phone number.");
}
}
}
আউটপুট:
Valid phone number.
3. শুধুমাত্র ছোট হাতের অক্ষর চেক করা (Lowercase letters only)
Regex Pattern:
^[a-z]+$
Explanation:
^: প্যাটার্নের শুরু।[a-z]+: একটি বা একাধিক ছোট হাতের অক্ষর।$: প্যাটার্নের শেষ।
এটি শুধুমাত্র ছোট হাতের অক্ষর ধারণকারী স্ট্রিং চেক করবে।
Java কোড উদাহরণ:
import java.util.regex.*;
public class LowercaseValidation {
public static void main(String[] args) {
String input = "hello";
// ছোট হাতের অক্ষর প্যাটার্ন তৈরি
String lowercasePattern = "^[a-z]+$";
// প্যাটার্ন কম্পাইল করা
Pattern pattern = Pattern.compile(lowercasePattern);
// Matcher ব্যবহার করে চেক করা
Matcher matcher = pattern.matcher(input);
// প্যাটার্ন মিললে True, না হলে False
if (matcher.matches()) {
System.out.println("Valid input: only lowercase letters.");
} else {
System.out.println("Invalid input: contains non-lowercase letters.");
}
}
}
আউটপুট:
Valid input: only lowercase letters.
4. ডিজিট এবং দশমিক সংখ্যা চেক করা (Decimal Number Validation)
Regex Pattern:
^\d+(\.\d+)?$
Explanation:
^: প্যাটার্নের শুরু।\d+: একটি বা একাধিক ডিজিট।(\.\d+)?: দশমিকের পরে একটি বা একাধিক ডিজিট থাকতে পারে, তবে এটি ঐচ্ছিক।$: প্যাটার্নের শেষ।
এটি সঠিকভাবে ডিজিট এবং দশমিক সংখ্যাগুলি যাচাই করবে (যেমন 123, 123.45 ইত্যাদি)।
Java কোড উদাহরণ:
import java.util.regex.*;
public class DecimalNumberValidation {
public static void main(String[] args) {
String input = "123.45";
// দশমিক সংখ্যা প্যাটার্ন তৈরি
String decimalPattern = "^\\d+(\\.\\d+)?$";
// প্যাটার্ন কম্পাইল করা
Pattern pattern = Pattern.compile(decimalPattern);
// Matcher ব্যবহার করে চেক করা
Matcher matcher = pattern.matcher(input);
// প্যাটার্ন মিললে True, না হলে False
if (matcher.matches()) {
System.out.println("Valid decimal number.");
} else {
System.out.println("Invalid decimal number.");
}
}
}
আউটপুট:
Valid decimal number.
Java Regex ব্যবহার করে আপনি সহজেই স্ট্রিং প্যাটার্ন তৈরি করতে এবং সেই প্যাটার্নের সাথে স্ট্রিং মিলিয়ে দেখতে পারেন। স্ট্রিংয়ে নির্দিষ্ট প্যাটার্ন যাচাই, স্ট্রিংয়ের অংশ বের করা, বা স্ট্রিং পরিবর্তন করতে Regex খুবই কার্যকর এবং শক্তিশালী টুল।
- Pattern.compile(): Regex স্ট্রিং থেকে একটি
Patternঅবজেক্ট তৈরি করে। - Matcher:
Patternএর মাধ্যমে ইনপুট স্ট্রিং ম্যাচ করায়।
Regex (Regular Expressions) একটি শক্তিশালী টুল যা টেক্সট ডেটা প্রক্রিয়া করার জন্য ব্যবহৃত হয়। Java-এ java.util.regex প্যাকেজটি রেগুলার এক্সপ্রেশন (regex) এর সাথে কাজ করার জন্য প্রয়োজনীয় ক্লাস এবং মেথড সরবরাহ করে। এই প্যাকেজের অন্যতম প্রধান ক্লাস দুটি হল Pattern এবং Matcher।
- Pattern: এটি রেগুলার এক্সপ্রেশন ধারণ করে এবং এটি
Pattern.compile()মেথডের মাধ্যমে তৈরি করা হয়। - Matcher: এটি একটি ইনস্ট্যান্স যা Pattern এর সাথে String মেলানোর জন্য ব্যবহার করা হয়।
Pattern এবং Matcher এর মাধ্যমে String Matching
কিভাবে Pattern এবং Matcher কাজ করে:
- Pattern একটি রেগুলার এক্সপ্রেশন রচনা করে।
- Matcher সেই Pattern এর সাথে একটি String মেলানোর জন্য ব্যবহৃত হয়।
প্রক্রিয়াটি সাধারণত এই রকম:
- Pattern.compile(regex): একটি প্যাটার্ন তৈরি করুন।
- matcher.find() বা matcher.matches(): নির্দিষ্ট স্ট্রিংয়ের সাথে প্যাটার্ন মেলাতে চেষ্টা করুন।
- matcher.group(): মেলে গেলে ম্যাচের অংশ (যদি থাকে) বের করুন।
Matcher ক্লাসের কিছু গুরুত্বপূর্ণ মেথড:
find(): এটি স্ট্রিংয়ের মধ্যে প্যাটার্ন খুঁজে বের করে এবং এটি একটি বুলিয়ান রিটার্ন করে (যদি প্যাটার্ন মেলে থাকে তাহলেtrue, অন্যথায়false)।matches(): এটি স্ট্রিংয়ের পুরো অংশের সাথে প্যাটার্ন মেলানোর চেষ্টা করে। যদি পুরো স্ট্রিংয়ের সাথে প্যাটার্ন মেলে তবেtrueরিটার্ন করে, অন্যথায়false।group(): এটি ম্যাচের অংশ (matched substring) রিটার্ন করে।start(): এটি ম্যাচের শুরু পজিশন রিটার্ন করে।end(): এটি ম্যাচের শেষ পজিশন রিটার্ন করে।
উদাহরণ ১: find() মেথড দিয়ে Pattern Matching
import java.util.regex.*;
public class RegexExample {
public static void main(String[] args) {
// Regular expression pattern
String regex = "a*b"; // 'a' zero or more times followed by 'b'
// Compile the regex pattern
Pattern pattern = Pattern.compile(regex);
// Sample text to be matched
String text = "aaab";
// Create a matcher object to find pattern in the text
Matcher matcher = pattern.matcher(text);
// Find the match
if (matcher.find()) {
System.out.println("Found match: " + matcher.group());
} else {
System.out.println("No match found.");
}
}
}
ব্যাখ্যা:
- প্যাটার্ন
"a*b"এর মানে হলো যে স্ট্রিংয়ে 0 বা তার বেশি 'a' থাকতে পারে এবং তার পরে একটি 'b' থাকবে। matcher.find()এই প্যাটার্নটি স্ট্রিংয়ের মধ্যে খুঁজে এবং মেলে গেলে মেলা অংশ (matched substring)matcher.group()দিয়ে দেখানো হয়।
আউটপুট:
Found match: aaab
উদাহরণ ২: matches() মেথড দিয়ে Pattern Matching
import java.util.regex.*;
public class RegexExample {
public static void main(String[] args) {
// Regular expression pattern
String regex = "a*b"; // 'a' zero or more times followed by 'b'
// Compile the regex pattern
Pattern pattern = Pattern.compile(regex);
// Sample text to be matched
String text = "aaab";
// Create a matcher object to match the entire string with the pattern
Matcher matcher = pattern.matcher(text);
// Check if the entire string matches the pattern
if (matcher.matches()) {
System.out.println("The entire string matches the pattern.");
} else {
System.out.println("The entire string does not match the pattern.");
}
}
}
ব্যাখ্যা:
matcher.matches()স্ট্রিংয়ের পুরো অংশের সাথে প্যাটার্নটি মেলে কিনা তা পরীক্ষা করে।- যদি পুরো স্ট্রিংয়ের সাথে প্যাটার্ন মেলে, তবে
trueরিটার্ন করবে, অন্যথায়false।
আউটপুট:
The entire string matches the pattern.
উদাহরণ ৩: Matcher ব্যবহার করে Multiple Matches খোঁজা
import java.util.regex.*;
public class RegexExample {
public static void main(String[] args) {
// Regular expression pattern to find words starting with 'a'
String regex = "\\ba\\w*"; // \\b for word boundary, a followed by any word characters
// Compile the regex pattern
Pattern pattern = Pattern.compile(regex);
// Sample text to be matched
String text = "apple banana apricot aardvark";
// Create a matcher object to find multiple matches
Matcher matcher = pattern.matcher(text);
// Find and print all matches
while (matcher.find()) {
System.out.println("Found match: " + matcher.group());
}
}
}
ব্যাখ্যা:
\\ba\\w*প্যাটার্নটি এমন শব্দ খুঁজে যা 'a' দিয়ে শুরু হয় এবং তারপরে যেকোনো সংখ্যক অক্ষর থাকে।matcher.find()মেথডের মাধ্যমে একাধিক ম্যাচ খোঁজা যায় এবং প্রতিটি ম্যাচের জন্যmatcher.group()ব্যবহার করে ম্যাচের অংশ দেখানো হয়।
আউটপুট:
Found match: apple
Found match: apricot
Found match: aardvark
উদাহরণ ৪: Matcher দিয়ে Grouping
import java.util.regex.*;
public class RegexExample {
public static void main(String[] args) {
// Regular expression pattern with groups
String regex = "(\\d+)-(\\d+)-(\\d+)"; // Matches dates in the format 'YYYY-MM-DD'
// Compile the regex pattern
Pattern pattern = Pattern.compile(regex);
// Sample text (date in 'YYYY-MM-DD' format)
String text = "2023-05-15";
// Create a matcher object
Matcher matcher = pattern.matcher(text);
// Check for a match and extract groups
if (matcher.find()) {
System.out.println("Year: " + matcher.group(1));
System.out.println("Month: " + matcher.group(2));
System.out.println("Day: " + matcher.group(3));
} else {
System.out.println("No match found.");
}
}
}
ব্যাখ্যা:
group(1),group(2), এবংgroup(3)প্যাটার্নের গ্রুপ ১, গ্রুপ ২ এবং গ্রুপ ৩ (অর্থাৎYYYY,MM,DD) এর মান নির্ধারণ করবে।- এখানে
()ব্যবহার করা হয়েছে প্যাটার্নের মধ্যে গ্রুপিং করার জন্য, যা নির্দিষ্ট অংশ আলাদা করতে সহায়তা করে।
আউটপুট:
Year: 2023
Month: 05
Day: 15
Java-তে Regex এবং Matcher ক্লাসের মাধ্যমে আপনি খুব সহজে string matching এবং pattern matching করতে পারেন। find(), matches(), group() এবং start() ইত্যাদি মেথড ব্যবহার করে আপনি টেক্সটের মধ্যে প্যাটার্ন খুঁজে বের করতে পারেন এবং তার সাথে কাজ করতে পারেন। Regex ব্যবহার করে আপনি অত্যন্ত শক্তিশালী এবং ডাইনামিক টেক্সট প্রক্রিয়া তৈরি করতে পারেন, যা ডেটা ভ্যালিডেশন, টেক্সট প্যাটার্ন খোঁজা, এবং ইনপুট বা আউটপুট প্রক্রিয়া অনেক সহজ করে তোলে।
Read more