Regex (Regular Expressions) Java তে একটি শক্তিশালী টুল যা ডেটা ভ্যালিডেশন এবং পার্সিংয়ের জন্য ব্যাপকভাবে ব্যবহৃত হয়। Regex আপনাকে টেক্সট বা স্ট্রিংয়ের মধ্যে নির্দিষ্ট প্যাটার্ন চিহ্নিত করতে এবং ভ্যালিডেট করতে সহায়তা করে। এটি বিশেষভাবে ব্যবহার হয় ইমেইল ভ্যালিডেশন, ফোন নম্বর ভ্যালিডেশন, ডেটা ফরম্যাট ভ্যালিডেশন, ফর্ম ইনপুট ভ্যালিডেশন, এবং লগ ফাইল পার্সিং এর মতো কাজের জন্য।
Java তে java.util.regex প্যাকেজে Pattern এবং Matcher ক্লাসের মাধ্যমে Regex ব্যবহৃত হয়। চলুন দেখি কিভাবে Regex ব্যবহার করে বিভিন্ন ধরনের Data Validation এবং Parsing করা যায়।
1. Data Validation with Regex
Data Validation এর মাধ্যমে আপনি টেক্সট বা স্ট্রিং এর মান যাচাই করতে পারেন, যেমন একটি ইমেইল ঠিকানা, ফোন নম্বর, বা অন্যান্য ইনপুটের ফরম্যাট সঠিক কিনা।
Example 1: Email Address Validation
Regex দিয়ে ইমেইল অ্যাড্রেসের ভ্যালিডেশন করা একটি সাধারণ কাজ। একটি সঠিক ইমেইল ঠিকানার প্যাটার্ন হবে username@domain.com।
import java.util.regex.*;
public class EmailValidation {
public static void main(String[] args) {
// Regex pattern for validating email
String emailPattern = "^[a-zA-Z0-9_+&*-]+(?:\\.[a-zA-Z0-9_+&*-]+)*@(?:[a-zA-Z0-9-]+\\.)+[a-zA-Z]{2,7}$";
// String to validate
String email = "example@example.com";
// Compile the pattern
Pattern p = Pattern.compile(emailPattern);
// Create a matcher
Matcher m = p.matcher(email);
// Check if the email matches the pattern
if (m.matches()) {
System.out.println("Valid email address!");
} else {
System.out.println("Invalid email address!");
}
}
}
Output:
Valid email address!
Explanation:
- Regex:
^[a-zA-Z0-9_+&*-]+(?:\\.[a-zA-Z0-9_+&*-]+)*@(?:[a-zA-Z0-9-]+\\.)+[a-zA-Z]{2,7}$^[a-zA-Z0-9_+&*-]+: ইমেইল ইউজারনেমের জন্য alphanumeric এবং কিছু বিশেষ ক্যারেক্টার।@: সিম্বল '@'।(?:[a-zA-Z0-9-]+\\.)+: ডোমেইন নামের জন্য, যেখানে ডট দিয়ে বিভিন্ন অংশ বিভক্ত।[a-zA-Z]{2,7}$: ডোমেইনের শেষের এক্সটেনশন (যেমন.com,.org)।
Example 2: Phone Number Validation
ধরা যাক, আমরা ফোন নম্বর যাচাই করতে চাই যা (XXX) XXX-XXXX ফরম্যাটে থাকবে।
import java.util.regex.*;
public class PhoneNumberValidation {
public static void main(String[] args) {
// Regex pattern for validating phone number
String phonePattern = "^\\(\\d{3}\\) \\d{3}-\\d{4}$";
// String to validate
String phoneNumber = "(123) 456-7890";
// Compile the pattern
Pattern p = Pattern.compile(phonePattern);
// Create a matcher
Matcher m = p.matcher(phoneNumber);
// Check if the phone number matches the pattern
if (m.matches()) {
System.out.println("Valid phone number!");
} else {
System.out.println("Invalid phone number!");
}
}
}
Output:
Valid phone number!
Explanation:
- Regex:
^\\(\\d{3}\\) \\d{3}-\\d{4}$\\(এবং\\): প্যারেনথেসিস চিহ্নগুলি এস্কেপ করা হয়েছে।\\d{3}: তিনটি ডিজিট।\\d{3}-\\d{4}: ৩ ডিজিটের পরে স্পেস এবং তারপর ৪ ডিজিট, ড্যাশ সহ।
2. Data Parsing with Regex
Data Parsing এর মাধ্যমে আপনি টেক্সট বা স্ট্রিং থেকে নির্দিষ্ট অংশ বের করতে পারেন। যেমন, Log file parsing, CSV file parsing, Extracting dates, Extracting numbers, ইত্যাদি।
Example 1: Log File Parsing
ধরা যাক, আমাদের একটি লগ ফাইল রয়েছে যেখানে INFO, ERROR, বা WARN লেভেলের লগ থাকে। আমরা এই লেভেলগুলির সাথে সম্পর্কিত ইনফরমেশন বের করতে চাই।
import java.util.regex.*;
import java.util.*;
public class LogFileParser {
public static void main(String[] args) {
// Sample log data
List<String> logs = Arrays.asList(
"2024-12-23 10:30:45 INFO Log message 1",
"2024-12-23 10:32:50 ERROR Log message 2",
"2024-12-23 10:34:55 WARN Log message 3",
"2024-12-23 10:35:00 INFO Log message 4"
);
// Regex pattern to extract date, log level, and message
String logPattern = "(\\d{4}-\\d{2}-\\d{2} \\d{2}:\\d{2}:\\d{2}) (INFO|ERROR|WARN) (.*)";
// Loop through the logs and match the pattern
logs.stream()
.map(log -> {
Pattern p = Pattern.compile(logPattern);
Matcher m = p.matcher(log);
if (m.find()) {
return "Date: " + m.group(1) + ", Level: " + m.group(2) + ", Message: " + m.group(3);
}
return "Invalid log entry";
})
.forEach(System.out::println);
}
}
Output:
Date: 2024-12-23 10:30:45, Level: INFO, Message: Log message 1
Date: 2024-12-23 10:32:50, Level: ERROR, Message: Log message 2
Date: 2024-12-23 10:34:55, Level: WARN, Message: Log message 3
Date: 2024-12-23 10:35:00, Level: INFO, Message: Log message 4
Explanation:
- Regex:
(\\d{4}-\\d{2}-\\d{2} \\d{2}:\\d{2}:\\d{2}) (INFO|ERROR|WARN) (.*)- প্রথম গ্রুপটি তারিখ অংশ (YYYY-MM-DD HH:MM:SS) বের করে।
- দ্বিতীয় গ্রুপটি log level বের করে (INFO, ERROR, WARN)।
- তৃতীয় গ্রুপটি log message বের করে।
Functional Programming (Streams) ব্যবহার:
- এখানে Streams এবং Lambda expressions ব্যবহার করা হয়েছে।
map()মেথড ব্যবহার করে প্রতিটি লগ এন্ট্রি থেকে তথ্য বের করা হয়েছে এবং Regex দিয়ে log level এবং log message বের করা হয়েছে।
Example 2: Parsing Dates from a String
ধরা যাক, একটি স্ট্রিং থেকে তারিখ বের করতে চাই। এখানে একটি log entry থেকে তারিখ বের করা হচ্ছে।
import java.util.regex.*;
public class DateParsing {
public static void main(String[] args) {
// Sample log entry with a date
String log = "2024-12-23 10:30:45 INFO Log message 1";
// Regex pattern to extract date
String datePattern = "(\\d{4}-\\d{2}-\\d{2})";
// Compile the pattern
Pattern p = Pattern.compile(datePattern);
// Create a matcher
Matcher m = p.matcher(log);
// Find and extract the date
if (m.find()) {
System.out.println("Extracted Date: " + m.group(1));
} else {
System.out.println("No date found.");
}
}
}
Output:
Extracted Date: 2024-12-23
Explanation:
- Regex:
(\\d{4}-\\d{2}-\\d{2})- এটি তারিখের YYYY-MM-DD ফরম্যাটের অংশ বের করে।
Regex ব্যবহার করে আপনি সহজেই data validation এবং data parsing করতে পারেন। Java তে java.util.regex প্যাকেজটি Regex কার্যক্রমের জন্য খুবই কার্যকরী এবং শক্তিশালী। Java 8+ তে functional programming এর সাহায্যে Streams এবং Lambda expressions ব্যবহার করে আপনি Regex এর কাজ আরও কমপ্যাক্ট এবং কার্যকরভাবে করতে পারেন।
- Data Validation: Regex দিয়ে আপনি ইমেইল, ফোন নম্বর, পাসওয়ার্ড, এবং অন্যান্য ইনপুট যাচাই করতে পারেন।
- Data Parsing: লগ ফাইল বা অন্যান্য ডেটা থেকে নির্দিষ্ট অংশ বের করতে Regex ব্যবহার করা হয়।
এভাবে, Java Regex এবং Functional Programming এর সংমিশ্রণ আপনাকে আরও দ্রুত, ক্লিন, এবং কার্যকরী কোড লেখার সুযোগ দেয়।
Read more