Complex pattern matching প্রায়ই জটিল টেক্সট অথবা স্ট্রিং অনুসন্ধান এবং বিশ্লেষণ করতে ব্যবহৃত হয়, যেমন email validation, phone number formatting, custom log analysis, বা text parsing। এই ধরনের কাজের জন্য Java Regular Expressions (Regex) ব্যবহৃত হয়, যা java.util.regex প্যাকেজে অন্তর্ভুক্ত থাকে।
এখানে, আমরা Java Reflection API এবং Regex এর সাথে Complex Pattern Matching করার একটি প্রাকটিক্যাল উদাহরণ দেখব।
উদাহরণ: Complex Pattern Matching Using Java Reflection
ধরা যাক, আমাদের একটি Employee ক্লাস আছে, যার মধ্যে কিছু ফিল্ড যেমন id, name, email, phone ইত্যাদি রয়েছে। আমরা Reflection API ব্যবহার করে এই ফিল্ডগুলো অ্যাক্সেস করব এবং Regex ব্যবহার করে এই ফিল্ডগুলির মান যাচাই (validate) করব। উদাহরণস্বরূপ, আমরা email validation এবং phone number formatting চেক করব।
Step 1: Employee ক্লাস তৈরি করা
import java.lang.reflect.*;
import java.util.regex.*;
class Employee {
private int id;
private String name;
private String email;
private String phone;
public Employee(int id, String name, String email, String phone) {
this.id = id;
this.name = name;
this.email = email;
this.phone = phone;
}
// Getters and setters
public int getId() { return id; }
public String getName() { return name; }
public String getEmail() { return email; }
public String getPhone() { return phone; }
}
Step 2: Regex প্যাটার্ন তৈরি এবং Employee ফিল্ড validate করা
এখন আমরা Employee ক্লাসের ফিল্ডগুলো অ্যাক্সেস করার জন্য Reflection ব্যবহার করব এবং তাদের মান যাচাই করতে Regex প্যাটার্ন ব্যবহার করব।
- Email Validation Regex: সাধারণভাবে
emailপ্যাটার্ন এমনভাবে হবে:^[a-zA-Z0-9_+&*-]+(?:\.[a-zA-Z0-9_+&*-]+)*@(?:[a-zA-Z0-9-]+\.)+[a-zA-Z]{2,7}$ - Phone Number Validation Regex: ফোন নম্বরের জন্য একটি সাধারণ প্যাটার্ন হবে:
^\+?[0-9]{1,4}?[-.\s]?[0-9]+[-.\s]?[0-9]+[-.\s]?[0-9]+$
Step 3: Reflection API এবং Regex এর সাথে Validation
import java.lang.reflect.*;
import java.util.regex.*;
public class ReflectionExample {
public static void main(String[] args) {
// Employee object creation
Employee emp = new Employee(101, "John Doe", "johndoe@example.com", "+1-234-567-8901");
try {
// Get class object using reflection
Class<?> clazz = emp.getClass();
// Validate email using reflection and regex
Field emailField = clazz.getDeclaredField("email");
emailField.setAccessible(true);
String emailValue = (String) emailField.get(emp);
if (isValidEmail(emailValue)) {
System.out.println("Valid email: " + emailValue);
} else {
System.out.println("Invalid email: " + emailValue);
}
// Validate phone number using reflection and regex
Field phoneField = clazz.getDeclaredField("phone");
phoneField.setAccessible(true);
String phoneValue = (String) phoneField.get(emp);
if (isValidPhone(phoneValue)) {
System.out.println("Valid phone number: " + phoneValue);
} else {
System.out.println("Invalid phone number: " + phoneValue);
}
} catch (NoSuchFieldException | IllegalAccessException e) {
e.printStackTrace();
}
}
// Email validation using regex
private static boolean isValidEmail(String email) {
String emailRegex = "^[a-zA-Z0-9_+&*-]+(?:\\.[a-zA-Z0-9_+&*-]+)*@(?:[a-zA-Z0-9-]+\\.)+[a-zA-Z]{2,7}$";
Pattern pattern = Pattern.compile(emailRegex);
Matcher matcher = pattern.matcher(email);
return matcher.matches();
}
// Phone number validation using regex
private static boolean isValidPhone(String phone) {
String phoneRegex = "^\\+?[0-9]{1,4}?[-.\\s]?[0-9]+[-.\\s]?[0-9]+[-.\\s]?[0-9]+$";
Pattern pattern = Pattern.compile(phoneRegex);
Matcher matcher = pattern.matcher(phone);
return matcher.matches();
}
}
ব্যাখ্যা:
- Reflection API:
- আমরা
clazz.getDeclaredField("email")এবংclazz.getDeclaredField("phone")ব্যবহার করেemailএবংphoneফিল্ডগুলো অ্যাক্সেস করেছি। setAccessible(true)মেথড ব্যবহার করে private ফিল্ডগুলো অ্যাক্সেস করতে সক্ষম হয়েছি।
- আমরা
- Regex Validation:
isValidEmailএবংisValidPhoneমেথডগুলিতে আমরা Regex pattern ব্যবহার করেছি, যা যথাক্রমে email এবং phone number যাচাই করে।
- Pattern Matching:
Pattern.compile()মেথডটি regex প্যাটার্ন কম্পাইল করে এবংmatcher.matches()মেথডটি regex এর সাথে স্ট্রিং মিলিয়ে তা যাচাই করে।
Step 4: Output
Valid email: johndoe@example.com
Valid phone number: +1-234-567-8901
অতিরিক্ত বৈশিষ্ট্য এবং প্রয়োগ:
- Complex Text Parsing:
- এইভাবে আপনি আরো জটিল প্যাটার্ন ম্যানিপুলেশন করতে পারেন, যেমন custom logs, structured data parsing, বা web scraping।
- Dynamic Behavior:
- Reflection API আপনাকে কোডের মধ্যে dynamic behavior তৈরি করতে সাহায্য করে, যেখানে আপনি runtime-এ ফিল্ড এবং মেথডের অ্যাক্সেস পাবেন এবং regex ব্যবহার করে টেক্সট ম্যানিপুলেট করতে পারবেন।
- Data Validation:
- Regex এবং Reflection একসাথে ব্যবহার করে আপনি ডেটা ভ্যালিডেশন, যেমন form validation, user input validation, ইত্যাদিতে ব্যবহার করতে পারেন।
Java Reflection এবং Regular Expressions (Regex) একসাথে ব্যবহার করলে আপনি ডাইনামিকভাবে কোডের বিভিন্ন অংশের উপর প্যাটার্ন মেলানো এবং যাচাই করতে পারবেন। Reflection আপনাকে runtime-এ মেথড এবং ফিল্ডগুলোর অ্যাক্সেস দিতে সাহায্য করে, এবং Regex আপনাকে শক্তিশালী এবং জটিল টেক্সট ম্যানিপুলেশন করতে সাহায্য করে। এই দুটি বৈশিষ্ট্য একত্রে ব্যবহার করে আপনি আরও ফ্লেক্সিবল এবং শক্তিশালী ডেটা ভ্যালিডেশন, লোগ অ্যানালাইসিস, এবং ডাইনামিক প্রসেসিং কোড তৈরি করতে পারেন।
Read more