Java Regular Expressions (Regex) একটি শক্তিশালী এবং কার্যকরী টুল যা আপনাকে স্ট্রিং সম্পর্কিত বিভিন্ন প্যাটার্ন ম্যানিপুলেট এবং খুঁজে বের করার জন্য ব্যবহৃত হয়। এটি স্ট্রিং সার্চিং, স্ট্রিং ম্যানিপুলেশন, এবং ভ্যালিডেশন সহ নানা কাজে ব্যবহৃত হয়। Java এ Regex ইমপ্লিমেন্টেশনটি java.util.regex প্যাকেজের মাধ্যমে করা হয়।
Regex এর সাহায্যে আপনি নির্দিষ্ট প্যাটার্ন অনুসারে স্ট্রিং খুঁজে বের করতে পারেন, যেমন ফোন নম্বর, ইমেইল ঠিকানা, বা কোনো নির্দিষ্ট শব্দের উপস্থিতি খোঁজা।
Java Regex এর প্রধান অংশ:
- Pattern Class:
java.util.regex.Patternক্লাসটি regex প্যাটার্নের প্রতিনিধিত্ব করে। এটি regex প্যাটার্ন স্ট্রিং হিসেবে ডিফাইন করে এবং স্ট্রিংয়ের সাথে ম্যাচ করার জন্য ব্যবহৃত হয়।
- Matcher Class:
java.util.regex.Matcherক্লাসটি একটিPatternএর সাথে স্ট্রিং ম্যাচ করানোর জন্য ব্যবহৃত হয়। এটি regex প্যাটার্ন অনুসারে স্ট্রিং অনুসন্ধান, স্ট্রিং পরিবর্তন এবং ম্যাচ করা ইত্যাদি কাজ করে।
- PatternSyntaxException:
- এটি একটি exception ক্লাস যা তখন থ্রো হয় যখন কোনো invalid বা ভুল regex প্যাটার্ন ব্যবহার করা হয়।
Regex এর প্রধান বৈশিষ্ট্যসমূহ:
- Matching:
- স্ট্রিং বা পাঠ্যকে একটি নির্দিষ্ট প্যাটার্নের সাথে মিলিয়ে দেখা।
- Searching:
- স্ট্রিংয়ে একটি নির্দিষ্ট প্যাটার্ন খোঁজা।
- Replacing:
- একটি স্ট্রিংয়ে নির্দিষ্ট প্যাটার্ন পাওয়া গেলে তাকে অন্য কিছু দিয়ে প্রতিস্থাপন করা।
- Splitting:
- স্ট্রিংকে নির্দিষ্ট প্যাটার্নের ভিত্তিতে ভাগ করা।
Java Regex Syntax:
Regex প্যাটার্ন তৈরি করার জন্য কিছু মৌলিক সিম্বল ও নিয়ম রয়েছে:
.(Dot): কোনো একটি একক অক্ষর (এটি নিউ লাইন ছাড়া)^: প্যাটার্নের শুরু$: প্যাটার্নের শেষ[]: চরিত্রের সেট (যেমন,[a-z]সমস্ত ছোট হাতের অক্ষর)|: OR অপারেটর (যেমন,a|bমানে 'a' বা 'b')*: পূর্ববর্তী ক্যারেকটারটি 0 বা তার বেশি বার উপস্থিত হতে পারে।+: পূর্ববর্তী ক্যারেকটারটি 1 বা তার বেশি বার উপস্থিত হতে পারে।?: পূর্ববর্তী ক্যারেকটারটি 0 বা 1 বার উপস্থিত হতে পারে।\d: ডিজিট (0-9)\w: শব্দ অক্ষর (a-z, A-Z, 0-9, _)\s: সাদা স্থান (space, tab, newline)
Java Regex Example:
import java.util.regex.*;
public class RegexExample {
public static void main(String[] args) {
// Pattern তৈরি করা
Pattern pattern = Pattern.compile("\\d{3}-\\d{2}-\\d{4}");
// Matcher তৈরি করা
Matcher matcher = pattern.matcher("My SSN is 123-45-6789.");
// মাচিং চেক করা
if (matcher.find()) {
System.out.println("Found a match: " + matcher.group());
} else {
System.out.println("No match found.");
}
}
}
ব্যাখ্যা:
- Pattern.compile("\d{3}-\d{2}-\d{4}"):
- এটি একটি regex প্যাটার্ন তৈরি করে যা Social Security Number (SSN) এর মতো ফর্ম্যাট চেক করতে ব্যবহার হয় (যেমন: 123-45-6789)। এখানে
\\dমানে একটি ডিজিট এবং{n}মানে 'n' বার পুনরাবৃত্তি।
- এটি একটি regex প্যাটার্ন তৈরি করে যা Social Security Number (SSN) এর মতো ফর্ম্যাট চেক করতে ব্যবহার হয় (যেমন: 123-45-6789)। এখানে
- matcher.find():
find()মেথডটি স্ট্রিংয়ের মধ্যে প্যাটার্নের উপস্থিতি খোঁজে এবং এটি যদি মেলে তবে সত্য (true) রিটার্ন করে।
- matcher.group():
group()মেথডটি প্রথম ম্যাচের মান রিটার্ন করে।
Java Regex এর কার্যকারিতা:
1. Matching a Pattern:
Pattern pattern = Pattern.compile("\\d{3}-\\d{2}-\\d{4}"); // Regex pattern for SSN
Matcher matcher = pattern.matcher("My SSN is 123-45-6789.");
if (matcher.matches()) {
System.out.println("The pattern matches.");
} else {
System.out.println("The pattern does not match.");
}
2. Searching for a Pattern:
Pattern pattern = Pattern.compile("\\d{3}-\\d{2}-\\d{4}"); // Regex for SSN
Matcher matcher = pattern.matcher("My SSN is 123-45-6789 and yours is 987-65-4321.");
while (matcher.find()) {
System.out.println("Found SSN: " + matcher.group());
}
3. Replacing a Pattern:
Pattern pattern = Pattern.compile("\\d{3}-\\d{2}-\\d{4}"); // SSN format
Matcher matcher = pattern.matcher("My SSN is 123-45-6789.");
String result = matcher.replaceAll("XXX-XX-XXXX");
System.out.println(result); // "My SSN is XXX-XX-XXXX."
4. Splitting a String:
Pattern pattern = Pattern.compile(","); // Split by comma
String[] result = pattern.split("apple,banana,orange");
for (String s : result) {
System.out.println(s); // Outputs "apple", "banana", "orange"
}
Java Regex এর সুবিধা:
- Text Validation:
- Regex এর মাধ্যমে আপনি সহজে ইমেইল ঠিকানা, ফোন নম্বর, পিন কোড ইত্যাদির ভ্যালিডেশন করতে পারেন।
- Searching and Replacing:
- Regex স্ট্রিংয়ের মধ্যে বিশেষ প্যাটার্ন খুঁজে বের করতে এবং তা রিপ্লেস করতে ব্যবহৃত হয়।
- Complex Patterns:
- বিভিন্ন জটিল প্যাটার্ন সহজেই মিলানো যায়। যেমন, ইমেইল ঠিকানা বা ফোন নম্বরের স্ট্রিং প্যাটার্ন।
- Efficiency:
- Regex এর মাধ্যমে স্ট্রিং সার্চ এবং ম্যানিপুলেশন অনেক দ্রুত করা যায়, বিশেষত যখন অনেক ডেটার মধ্যে দ্রুত কাজ করতে হয়।
Java Regex এর সীমাবদ্ধতা:
- Complexity:
- Regex অনেক সময় কঠিন ও জটিল হতে পারে, বিশেষত যখন প্যাটার্নগুলো জটিল হয়। এটি কোডে অস্বচ্ছতা এবং মেইনটেন্যান্স সমস্যা সৃষ্টি করতে পারে।
- Performance:
- কিছু বিশেষ ধরনের জটিল Regex প্যাটার্ন স্ট্রিং প্রসেসিংয়ের জন্য পারফরম্যান্স কমাতে পারে।
- Learning Curve:
- Regular Expression শিখতে কিছু সময় নিতে পারে, বিশেষত যারা এর আগে কাজ করেননি তাদের জন্য।
Java Regex একটি অত্যন্ত শক্তিশালী টুল যা স্ট্রিং ম্যানিপুলেশন, ভ্যালিডেশন, সার্চিং, এবং রিপ্লেসমেন্টের জন্য ব্যবহৃত হয়। এটি java.util.regex প্যাকেজের মাধ্যমে পাওয়া যায় এবং এর ব্যবহার অনেক বেশি জনপ্রিয়। আপনি স্ট্রিংয়ের নির্দিষ্ট প্যাটার্ন খুঁজে বের করার জন্য এবং স্ট্রিং পরিবর্তন করতে Regex ব্যবহার করতে পারেন। তবে, এটি ব্যবহারের সময় কিছু সমস্যা যেমন পারফরম্যান্স এবং কোড জটিলতার বিষয়টি মাথায় রাখতে হবে।
Regular Expression (Regex) একটি শক্তিশালী প্যাটার্ন-ম্যাচিং টুল, যা টেক্সটের মধ্যে প্যাটার্ন খুঁজে বের করতে ব্যবহৃত হয়। এটি একটি নির্দিষ্ট ধরনের স্ট্রিং প্যাটার্নের সাথে মেলে এমন টেক্সটের অংশগুলো শনাক্ত করার জন্য ব্যবহার করা হয়। Java তে, Regex ব্যবহৃত হয় বিভিন্ন টেক্সট প্রসেসিং কাজের জন্য, যেমন টেক্সট অনুসন্ধান, প্রতিস্থাপন, বিভাজন, অথবা যাচাই করা।
Java তে Regex ব্যবহারের জন্য java.util.regex প্যাকেজটি রয়েছে। এই প্যাকেজে দুটি মূল ক্লাস রয়েছে:
- Pattern: এটি একটি কম্পাইল করা regular expression প্যাটার্ন ধারণ করে।
- Matcher: এটি একটি
Patternক্লাসের প্যাটার্নের সাথে ইনপুট স্ট্রিং ম্যাচ করে।
Regex এর মূল উপাদানসমূহ
- Metacharacters:
.(dot): যেকোনো একটি ক্যারেক্টার মেলবে (নতুন লাইন ছাড়া)।- উদাহরণ:
a.b→ "acb", "axb", "a1b" ইত্যাদি।
- উদাহরণ:
^(caret): স্ট্রিংয়ের শুরুতে ম্যাচ করবে।- উদাহরণ:
^abc→ "abcdef", "abc123" (কেবল স্ট্রিং যেটি "abc" দিয়ে শুরু হয়)।
- উদাহরণ:
$(dollar): স্ট্রিংয়ের শেষে ম্যাচ করবে।- উদাহরণ:
abc$→ "123abc", "helloabc" (কেবল স্ট্রিং যেটি "abc" দিয়ে শেষ হয়)।
- উদাহরণ:
[](character class): একটি নির্দিষ্ট চরিত্রের মধ্যে যে কোনো একটি ম্যাচ করবে।- উদাহরণ:
[abc]→ "a", "b", "c"।
- উদাহরণ:
|(pipe): "OR" অপারেটর, দুটি প্যাটার্নের মধ্যে যেকোনো একটি মেলবে।- উদাহরণ:
a|b→ "a" অথবা "b"।
- উদাহরণ:
*(asterisk): আগের ক্যারেক্টারটি ০ বা ততোধিক বার পুনরাবৃত্তি হতে পারে।- উদাহরণ:
a*b→ "b", "ab", "aaab" ইত্যাদি।
- উদাহরণ:
+(plus): আগের ক্যারেক্টারটি ১ বা ততোধিক বার পুনরাবৃত্তি হতে হবে।- উদাহরণ:
a+b→ "ab", "aaab" (কিন্তু শুধুমাত্র "b" নয়)।
- উদাহরণ:
?(question mark): আগের ক্যারেক্টারটি ০ বা ১ বার পুনরাবৃত্তি হতে পারে।- উদাহরণ:
a?b→ "b", "ab"।
- উদাহরণ:
- Escape Sequences:
\d: ডিজিট (0-9) ম্যাচ করবে।\D: অ-ডিজিট (0-9 ছাড়া) ম্যাচ করবে।\w: একটি শব্দের অংশ (letter, digit, underscore) ম্যাচ করবে।\W: অ-শব্দ চরিত্র (letter, digit, underscore ছাড়া) ম্যাচ করবে।\s: সাদা জায়গা (space, tab, newline) ম্যাচ করবে।\S: সাদা জায়গা ছাড়া অন্য কিছু ম্যাচ করবে।\b: শব্দের সীমানা (word boundary)।\B: শব্দের সীমানা ছাড়া অন্য কিছু।
- Quantifiers:
{n}: ঠিকnবার পুনরাবৃত্তি।- উদাহরণ:
a{3}→ "aaa" (যেকোনো স্ট্রিং যাতে "aaa" আছে)।
- উদাহরণ:
{n,}: ন্যূনতমnবার পুনরাবৃত্তি।- উদাহরণ:
a{2,}→ "aa", "aaa", "aaaa" ইত্যাদি।
- উদাহরণ:
{n,m}: ন্যূনতমnবার এবং সর্বোচ্চmবার পুনরাবৃত্তি।- উদাহরণ:
a{2,4}→ "aa", "aaa", "aaaa"।
- উদাহরণ:
- Grouping:
- `() (parentheses): প্যাটার্ন গ্রুপ করতে ব্যবহার হয়।
- উদাহরণ:
(ab)+→ "ab", "abab", "ababab" ইত্যাদি।
- উদাহরণ:
(?:...): নন-ক্যাপচার গ্রুপ, যেটি গ্রুপিং করলেও ফলস্বরূপে ক্যাপচার হবে না।
- `() (parentheses): প্যাটার্ন গ্রুপ করতে ব্যবহার হয়।
Java Regex API: Usage Example
Java তে Regular Expressions ব্যবহার করার জন্য প্রধানত দুটি ক্লাস ব্যবহার করা হয়:
- Pattern – প্যাটার্ন তৈরি করা।
- Matcher – স্ট্রিংয়ের সাথে প্যাটার্নের ম্যাচ চেক করা।
Example: Pattern Matching Using Regex
import java.util.regex.*;
public class RegexExample {
public static void main(String[] args) {
// Regular expression for a valid email
String emailRegex = "^[a-zA-Z0-9_+&*-]+(?:\\.[a-zA-Z0-9_+&*-]+)*@(?:[a-zA-Z0-9-]+\\.)+[a-zA-Z]{2,7}$";
// Compile the regular expression
Pattern pattern = Pattern.compile(emailRegex);
// Input string to match
String email = "test@example.com";
// Create a matcher object
Matcher matcher = pattern.matcher(email);
// Check if the email matches the pattern
if (matcher.matches()) {
System.out.println("Valid email address.");
} else {
System.out.println("Invalid email address.");
}
}
}
ব্যাখ্যা:
- এখানে একটি ইমেইল প্যাটার্ন তৈরি করা হয়েছে যা ইমেইল ঠিকানার জন্য একটি বৈধ ফরম্যাট চেক করে।
Pattern.compile()মেথডের মাধ্যমে Regex কম্পাইল করা হয়েছে।matcher.matches()মেথডটি ইনপুট স্ট্রিংয়ের সাথে প্যাটার্নের মিল চেক করে।
Regex এর ব্যবহার:
- String Matching: Regex ব্যবহার করে নির্দিষ্ট স্ট্রিং বা প্যাটার্ন খুঁজে বের করা।
- Data Validation: ইমেইল, ফোন নম্বর, পিন কোড, পোস্টাল কোড ইত্যাদি যাচাই করার জন্য।
- String Searching: স্ট্রিংয়ের মধ্যে প্যাটার্ন খুঁজে বের করা।
- Text Manipulation: স্ট্রিংয়ের অংশ পরিবর্তন বা প্রতিস্থাপন করা।
Java তে Regex একটি শক্তিশালী এবং নমনীয় টুল যা স্ট্রিংয়ের মধ্যে নির্দিষ্ট প্যাটার্ন খুঁজে বের করতে, স্ট্রিং যাচাই করতে এবং টেক্সট ম্যানিপুলেশন করতে ব্যবহৃত হয়। এটি টেক্সট প্রসেসিং এবং ডাটা ভ্যালিডেশন প্রক্রিয়াগুলিতে খুবই উপকারী। java.util.regex প্যাকেজের Pattern এবং Matcher ক্লাস ব্যবহার করে Java তে সহজেই Regex প্যাটার্নগুলো কার্যকরীভাবে প্রয়োগ করা যায়।
Regular Expressions (Regex) বা RegEx হল একটি শক্তিশালী টুল যা পাঠ্য (text) বা স্ট্রিং ম্যানিপুলেশন এবং অনুসন্ধানের জন্য ব্যবহৃত হয়। এটি একটি প্যাটার্ন বা টেমপ্লেট হিসেবে কাজ করে যা টেক্সটের নির্দিষ্ট অংশ খুঁজে বের করার জন্য ব্যবহৃত হয়। Java তে Regex অনেক শক্তিশালী এবং বহুল ব্যবহৃত একটি ফিচার, যা স্ট্রিং matching, validation, parsing, এবং টেক্সট ম্যানিপুলেশন সহজ করে তোলে।
Regex এর ইতিহাস:
- প্রথম উত্পত্তি:
- Regular expressions এর জন্ম হয়েছিল 1950s এর দিকে, যখন Ken Thompson এবং তার সহকর্মীরা UNIX অপারেটিং সিস্টেমের জন্য টেক্সট ম্যানিপুলেশন টুল তৈরি করছিলেন। তাদের মূল উদ্দেশ্য ছিল টেক্সটের মধ্যে নির্দিষ্ট প্যাটার্নগুলো খুঁজে বের করা এবং সেগুলোর সাথে সম্পর্কিত অ্যাকশন গ্রহণ করা।
- এটি মূলত Thompson এবং তার সহকর্মী Brian Kernighan এর কাজের ফলস্বরূপ, যারা টেক্সট প্রসেসিং এবং ডাটা ম্যানিপুলেশন এর জন্য UNIX tools তৈরি করেছিলেন। এর মধ্যে grep, sed, এবং awk-এর মতো গুরুত্বপূর্ণ কমান্ডগুলোর জন্য regex-এর ব্যবহার শুরু হয়।
- নির্দিষ্ট প্রোগ্রামিং ভাষায় প্রবেশ:
- প্রথমদিকে regex শুধুমাত্র কিছু বিশেষ purpose-built টুল এবং অপারেটিং সিস্টেমের মধ্যে ব্যবহৃত হতো। পরে এটি বিভিন্ন প্রোগ্রামিং ভাষার মধ্যে অন্তর্ভুক্ত হতে শুরু করে। Perl ছিল একটি গুরুত্বপূর্ণ ভাষা যা regex ব্যবহারের জন্য জনপ্রিয়তা লাভ করেছিল।
- Java তে regex ব্যবহার শুরু হয় Java 1.4 সংস্করণ থেকে, যখন Java তে নতুন
java.util.regexপ্যাকেজটি পরিচিত হয়। এই প্যাকেজটি regex pattern matching এবং টেক্সট ম্যানিপুলেশন কাজগুলোকে সহজ করে তোলে।
- RegEx এর প্রসার:
- Java-সহ বিভিন্ন ভাষায় regex-এর শক্তিশালী সমর্থন থাকায়, এটি দ্রুত জনপ্রিয় হয়ে ওঠে। Regex বিভিন্ন লাইব্রেরি, ফ্রেমওয়ার্ক এবং টুলের মধ্যে অত্যন্ত ব্যবহৃত হচ্ছে, বিশেষ করে text validation, data scraping, log analysis, এবং input processing ক্ষেত্রে।
Java Regex এর ব্যবহার:
Java তে regex ব্যবহারের জন্য java.util.regex প্যাকেজটি ব্যবহৃত হয়। এই প্যাকেজে দুটি প্রধান ক্লাস রয়েছে:
Pattern: এটি regex প্যাটার্নের প্রতিনিধিত্ব করে এবং regex matching এবং টেক্সট প্রসেসিং অপারেশন সঞ্চালন করার জন্য ব্যবহৃত হয়।Matcher: এটি regex matching-এর জন্য ব্যবহৃত হয়, এবংPatternক্লাসের সাথে যুক্ত করে টেক্সটের উপর regex মিলে কিনা তা চেক করতে সাহায্য করে।
Java Regex এর মৌলিক উপাদানগুলো:
Pattern:- একটি regex প্যাটার্ন কম্পাইল করে এবং এটি ব্যবহারকারীকে matching কাজ করার সুযোগ দেয়।
Matcher:- এটি regex প্যাটার্নের সাথে একটি স্ট্রিং মিলানোর জন্য ব্যবহৃত হয় এবং কিভাবে একটি স্ট্রিং matching করতে হবে তা জানায়।
Java Regex এর সাধারণ ব্যবহার:
1. Regex Pattern Matching:
এখানে একটি সাধারণ উদাহরণ দেওয়া হলো যেখানে একটি স্ট্রিংয়ে একটি প্যাটার্ন খোঁজা হচ্ছে।
import java.util.regex.*;
public class RegexExample {
public static void main(String[] args) {
// Regex pattern
String pattern = "abc";
// String to search
String text = "abcdef abc ghi abc";
// Compile the pattern
Pattern p = Pattern.compile(pattern);
// Create a matcher to find the pattern in the text
Matcher m = p.matcher(text);
// Check if the pattern exists in the text
boolean found = m.find();
if (found) {
System.out.println("Pattern found!");
} else {
System.out.println("Pattern not found.");
}
}
}
আউটপুট:
Pattern found!
2. Replacing Text Using Regex:
আপনি regex ব্যবহার করে টেক্সটের কিছু অংশ প্রতিস্থাপন করতে পারেন।
import java.util.regex.*;
public class RegexReplaceExample {
public static void main(String[] args) {
// Regex pattern
String pattern = "abc";
// String to search
String text = "abcdef abc ghi abc";
// Compile the pattern
Pattern p = Pattern.compile(pattern);
// Create a matcher to find the pattern in the text
Matcher m = p.matcher(text);
// Replace occurrences of the pattern with "xyz"
String result = m.replaceAll("xyz");
System.out.println("Result: " + result);
}
}
আউটপুট:
Result: xyzdef xyz ghi xyz
3. Validating Email Address Using Regex:
নির্দিষ্ট ফরম্যাটে email validation করার জন্য regex ব্যবহার করা যেতে পারে।
import java.util.regex.*;
public class EmailValidator {
public static void main(String[] args) {
// Regex pattern for validating email
String pattern = "^[a-zA-Z0-9_+&*-]+(?:\\.[a-zA-Z0-9_+&*-]+)*@(?:[a-zA-Z0-9-]+\\.)+[a-zA-Z]{2,7}$";
// Email to validate
String email = "example@example.com";
// Compile the pattern
Pattern p = Pattern.compile(pattern);
// Create a matcher to check if the email matches the pattern
Matcher m = p.matcher(email);
if (m.matches()) {
System.out.println("Valid email address.");
} else {
System.out.println("Invalid email address.");
}
}
}
আউটপুট:
Valid email address.
Java Regex এর জনপ্রিয় ব্যবহার:
- Input Validation:
- Regex ব্যবহার করে বিভিন্ন ধরনের ইনপুট যেমন email, phone number, postal code, credit card number ইত্যাদি যাচাই করা যায়।
- Text Search and Replace:
- নির্দিষ্ট প্যাটার্ন অনুযায়ী স্ট্রিং অনুসন্ধান এবং প্রতিস্থাপন করতে regex ব্যবহার করা হয়, যেমন find and replace বা log file analysis।
- Log Analysis:
- Regex ব্যবহার করে বিভিন্ন ধরনের লগ ফাইল থেকে নির্দিষ্ট তথ্য বের করা যায়, যেমন error logs বা activity logs বিশ্লেষণ।
- Data Parsing:
- Regex ব্যবহার করে কমপ্লেক্স ডেটা যেমন CSV ফাইল বা structured data পার্সিং করা যায়।
- Scraping Data from Web Pages:
- Regex ব্যবহার করে web scraping এর মাধ্যমে ওয়েব পেজ থেকে নির্দিষ্ট তথ্য সংগ্রহ করা যেতে পারে।
Java Regex একটি অত্যন্ত শক্তিশালী টুল যা টেক্সট ম্যানিপুলেশন, ভ্যালিডেশন, এবং পার্সিংয়ের জন্য ব্যাপকভাবে ব্যবহৃত হয়। এটি Java প্রোগ্রামিং ভাষার অত্যন্ত গুরুত্বপূর্ণ অংশ এবং এর মাধ্যমে অনেক টেক্সট প্রসেসিং কাজ সহজে করা সম্ভব। Java 1.4 সংস্করণ থেকে java.util.regex প্যাকেজটির মাধ্যমে Regex ব্যবহার করা সহজ হয়েছে এবং এটি Java ডেভেলপারদের জন্য একটি অত্যন্ত দরকারী টুল।
Regex (Regular Expression) একটি শক্তিশালী টুল যা স্ট্রিং ম্যানিপুলেশন এবং প্যাটার্ন মাচিং এর জন্য ব্যবহৃত হয়। Java তে Regex এর ভূমিকা অত্যন্ত গুরুত্বপূর্ণ, কারণ এটি বিভিন্ন ধরণের স্ট্রিং অনুসন্ধান, পরিবর্তন এবং যাচাই করার কাজ সহজ করে দেয়। Java তে Regex ব্যবহার করে আপনি স্ট্রিং যাচাই, স্ট্রিংয়ের মধ্যে প্যাটার্ন খুঁজে বের করা, স্ট্রিংয়ে কিছু পরিবর্তন আনা, বা কিছু নির্দিষ্ট প্যাটার্নের ভিত্তিতে স্ট্রিং ভাগ করতে পারেন।
Regex এর ভূমিকা:
- স্ট্রিং ম্যানিপুলেশন:
- Java তে Regex ব্যবহার করে স্ট্রিংয়ের মধ্যে নির্দিষ্ট প্যাটার্ন খুঁজে বের করা বা স্ট্রিংয়ের কিছু অংশ পরিবর্তন করা সহজ হয়।
- উদাহরণস্বরূপ, আপনি ইমেইল ঠিকানা, ফোন নাম্বার বা অন্যান্য ডাটা ফরম্যাটের যাচাই করতে Regex ব্যবহার করতে পারেন।
- প্যাটার্ন ম্যাচিং:
- Regex এর প্রধান ভূমিকা হলো স্ট্রিং এর মধ্যে নির্দিষ্ট প্যাটার্ন খুঁজে বের করা। আপনি Regex ব্যবহার করে সহজেই যাচাই করতে পারেন যে একটি স্ট্রিং একটি নির্দিষ্ট ফরম্যাট মেনে চলছে কি না (যেমন ইমেইল, ফোন নাম্বার, বা পিন কোড)।
- উদাহরণস্বরূপ, আপনি একটি স্ট্রিং যাচাই করতে পারেন যে এটি একটি বৈধ ইমেইল ঠিকানা কিনা।
- স্ট্রিং স্প্লিট:
- Regex ব্যবহার করে আপনি স্ট্রিং বিভক্ত করতে পারেন। এর মাধ্যমে আপনি একটি স্ট্রিংকে নির্দিষ্ট সেপারেটরের ভিত্তিতে ভাগ করতে পারেন (যেমন স্পেস, কমা, বা অন্যান্য সেপারেটর)।
- স্ট্রিং রিপ্লেসমেন্ট:
- Regex দিয়ে স্ট্রিংয়ের কিছু অংশ সহজে রিপ্লেস করা যায়, যেমন একটি প্যাটার্নের সমস্ত উদাহরণ সরিয়ে দেয়া বা প্রতিস্থাপন করা।
- স্ট্রিং ভ্যালিডেশন:
- Java তে Regex ব্যবহার করে আপনি কোন ডেটার বৈধতা পরীক্ষা করতে পারেন, যেমন পাসওয়ার্ড, ফোন নাম্বার, ইমেইল ঠিকানা ইত্যাদি।
Java Regex-এর প্রধান ক্লাসগুলি:
- Pattern:
Patternক্লাসটি Regex প্যাটার্নের সংজ্ঞা দেয় এবং এটি Regex প্যাটার্নের মেলানো এবং যাচাই করার জন্য ব্যবহৃত হয়।Pattern.compile()মেথডের মাধ্যমে একটি প্যাটার্ন কম্পাইল করা হয়।
- Matcher:
Matcherক্লাসটি Regex প্যাটার্নের সাথে স্ট্রিং মেলানোর কাজ করে। এটি প্যাটার্নে মেলানো স্ট্রিংয়ের অংশ বের করে এবং মেলানো স্ট্রিংয়ের অবস্থান (indexes) দিতে সাহায্য করে।matcher.find(),matcher.matches(),matcher.replaceAll()ইত্যাদি মেথড ব্যবহার করে স্ট্রিংয়ের মধ্যে প্যাটার্ন অনুসন্ধান এবং পরিবর্তন করা যায়।
Java তে Regex এর ব্যবহার:
1. Regex দিয়ে স্ট্রিং মেলানো:
import java.util.regex.*;
public class RegexExample {
public static void main(String[] args) {
// স্ট্রিং প্যাটার্ন তৈরি
String pattern = "[a-zA-Z]+";
// প্যাটার্ন কম্পাইল করা
Pattern r = Pattern.compile(pattern);
// স্ট্রিং এবং প্যাটার্নে মেলানো
Matcher m = r.matcher("Hello");
if (m.matches()) {
System.out.println("The string matches the pattern.");
} else {
System.out.println("The string does not match the pattern.");
}
}
}
এখানে, "[a-zA-Z]+" একটি Regex প্যাটার্ন যা শুধুমাত্র ইংরেজি অক্ষরগুলো মেলে। স্ট্রিংটি যদি শুধুমাত্র ইংরেজি অক্ষর থাকে, তাহলে তা মিলে যাবে।
2. Regex দিয়ে স্ট্রিং খুঁজে বের করা:
import java.util.regex.*;
public class RegexSearch {
public static void main(String[] args) {
String input = "My email is example@example.com";
String regex = "[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,}";
Pattern pattern = Pattern.compile(regex);
Matcher matcher = pattern.matcher(input);
if (matcher.find()) {
System.out.println("Found email: " + matcher.group());
} else {
System.out.println("No email found.");
}
}
}
এখানে, "([a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,})" একটি Regex প্যাটার্ন যা একটি বৈধ ইমেইল ঠিকানা খুঁজে বের করে।
3. Regex দিয়ে স্ট্রিং রিপ্লেসমেন্ট:
import java.util.regex.*;
public class RegexReplace {
public static void main(String[] args) {
String input = "My phone number is 123-456-7890.";
String regex = "\\d{3}-\\d{3}-\\d{4}"; // Matching phone number format
String replacement = "XXX-XXX-XXXX";
String result = input.replaceAll(regex, replacement);
System.out.println("Updated String: " + result);
}
}
এখানে, replaceAll() মেথড ব্যবহার করে ফোন নাম্বারটি রিপ্লেস করা হয়েছে।
4. Regex দিয়ে স্ট্রিং স্প্লিট:
import java.util.regex.*;
public class RegexSplit {
public static void main(String[] args) {
String input = "apple,banana,orange,grape";
String regex = ",";
String[] fruits = input.split(regex);
for (String fruit : fruits) {
System.out.println(fruit);
}
}
}
এখানে, কমা (,) সেপারেটরের ভিত্তিতে স্ট্রিংটি বিভক্ত করা হয়েছে।
5. Regex দিয়ে পাসওয়ার্ড ভ্যালিডেশন:
import java.util.regex.*;
public class PasswordValidation {
public static void main(String[] args) {
String password = "Abc12345!";
String regex = "^(?=.*[0-9])(?=.*[a-z])(?=.*[A-Z])(?=.*[!@#&()–[{}]:;',?/*~$^+=<>]).{8,}$";
Pattern pattern = Pattern.compile(regex);
Matcher matcher = pattern.matcher(password);
if (matcher.matches()) {
System.out.println("Valid password.");
} else {
System.out.println("Invalid password.");
}
}
}
এখানে, Regex দিয়ে একটি পাসওয়ার্ডের জন্য স্ট্রং পাসওয়ার্ড প্যাটার্ন যাচাই করা হয়েছে।
Java Regex এর সুবিধা:
- স্ট্রিং ম্যানিপুলেশন সহজ করা: Regex এর মাধ্যমে স্ট্রিং খুঁজে বের করা, পরিবর্তন করা, স্প্লিট করা ইত্যাদি কাজ খুব সহজ হয়ে যায়।
- ডাটা ভ্যালিডেশন: আপনি ইমেইল ঠিকানা, ফোন নাম্বার, পাসওয়ার্ড ইত্যাদি যাচাই করতে Regex ব্যবহার করতে পারেন।
- পারফরম্যান্স: Regex দ্রুত কাজ করে এবং এটি কম্পাইল টাইমে প্যাটার্ন সংরক্ষণ করে, তাই এটি রানটাইমে দ্রুত কাজ করে।
Java Regex এর সীমাবদ্ধতা:
- কমপ্লেক্সিটি: কিছু কমপ্লেক্স প্যাটার্ন তৈরির সময় Regex কঠিন হয়ে যেতে পারে, বিশেষত খুবই দীর্ঘ বা জটিল স্ট্রিং খুঁজে বের করার ক্ষেত্রে।
- ডিবাগিং চ্যালেঞ্জ: জটিল Regex প্যাটার্নে ভুল থাকলে সেটি ডিবাগ করা কঠিন হতে পারে।
Java তে Regex একটি অত্যন্ত শক্তিশালী টুল যা স্ট্রিং ম্যানিপুলেশন, ভ্যালিডেশন, এবং প্যাটার্ন ম্যাচিংয়ের জন্য ব্যবহৃত হয়। এটি বিভিন্ন ধরনের ডাটা ফরম্যাট যাচাই, স্ট্রিং পরিবর্তন এবং টেক্সট প্রসেসিংয়ের জন্য অপরিহার্য।
Java Regular Expressions (Regex) হল একটি শক্তিশালী টুল যা টেক্সট বা স্ট্রিংয়ের মধ্যে প্যাটার্ন মাচিং এবং ম্যানিপুলেশন করার জন্য ব্যবহৃত হয়। Java-তে Regex ব্যবহারের জন্য java.util.regex প্যাকেজটি প্রদান করা হয়েছে। এই প্যাকেজটি Java-তে স্ট্রিং প্যাটার্ন মাচিং এবং টেক্সট বিশ্লেষণ করতে ব্যবহৃত হয়, যা বিভিন্ন ধরনের টেক্সট প্রক্রিয়া যেমন ফাইল নাম চেক করা, ডেটা ভ্যালিডেশন, এবং স্ট্রিং প্রসেসিং এ সাহায্য করে।
java.util.regex প্যাকেজের মূল ক্লাসগুলো:
- Pattern:
Patternক্লাসটি একটি কম্পাইল করা রেগুলার এক্সপ্রেশনকে রিপ্রেজেন্ট করে।- এটি একটি স্ট্যাটিক মেথড
compile()প্রদান করে, যার মাধ্যমে আপনি একটি রেগুলার এক্সপ্রেশন কম্পাইল করতে পারেন।
- Matcher:
Matcherক্লাসটি একটিPatternএর সাথে স্ট্রিংয়ের মেচিং প্রক্রিয়া পরিচালনা করে। এটিPatternক্লাসেরmatcher()মেথডের মাধ্যমে পাওয়া যায়।Matcherক্লাসের মেথডগুলো যেমনfind(),matches(),replaceAll(), ইত্যাদি স্ট্রিং ম্যানিপুলেশন এবং প্যাটার্ন মাচিংয়ের জন্য ব্যবহৃত হয়।
- PatternSyntaxException:
- এই ক্লাসটি ব্যবহার করা হয় যখন একটি রেগুলার এক্সপ্রেশন সিনট্যাক্স ভুল থাকে এবং আপনি একটি
PatternSyntaxExceptionএক্সেপশন পান।
- এই ক্লাসটি ব্যবহার করা হয় যখন একটি রেগুলার এক্সপ্রেশন সিনট্যাক্স ভুল থাকে এবং আপনি একটি
Pattern ক্লাস:
Pattern ক্লাসটি Java-তে একটি রেগুলার এক্সপ্রেশনকে রিপ্রেজেন্ট করে এবং এটি কম্পাইল করার মাধ্যমে Regex প্যাটার্ন তৈরি করে।
Pattern Class এর কিছু গুরুত্বপূর্ণ মেথড:
compile(String regex):- এটি একটি স্ট্রিং রেগুলার এক্সপ্রেশনকে একটি
Patternঅবজেক্টে কম্পাইল করে। উদাহরণ:
Pattern pattern = Pattern.compile("a*b");
- এটি একটি স্ট্রিং রেগুলার এক্সপ্রেশনকে একটি
compile(String regex, int flags):- এটি একটি রেগুলার এক্সপ্রেশন কম্পাইল করে এবং কিছু নির্দিষ্ট ফ্ল্যাগ সেট করতে পারে (যেমন
Pattern.CASE_INSENSITIVE,Pattern.MULTILINEইত্যাদি)।
- এটি একটি রেগুলার এক্সপ্রেশন কম্পাইল করে এবং কিছু নির্দিষ্ট ফ্ল্যাগ সেট করতে পারে (যেমন
matcher(CharSequence input):- এটি একটি স্ট্রিং ইনপুট নিয়ে একটি
Matcherঅবজেক্ট তৈরি করে, যা পরবর্তী মাচিং কার্যক্রম পরিচালনা করতে পারে।
- এটি একটি স্ট্রিং ইনপুট নিয়ে একটি
split(CharSequence input):- এটি একটি ইনপুট স্ট্রিংয়ের মধ্যে রেগুলার এক্সপ্রেশন প্যাটার্ন অনুসারে স্ট্রিংটিকে বিভক্ত করে।
Pattern Class উদাহরণ:
import java.util.regex.*;
public class PatternExample {
public static void main(String[] args) {
String regex = "a*b";
String input = "aaab";
// Compile the regular expression into a pattern
Pattern pattern = Pattern.compile(regex);
// Create a matcher object to match the input string
Matcher matcher = pattern.matcher(input);
// Check if the pattern matches
if (matcher.matches()) {
System.out.println("Pattern matches the input string");
} else {
System.out.println("Pattern does not match the input string");
}
}
}
আউটপুট:
Pattern matches the input string
Matcher ক্লাস:
Matcher ক্লাসটি একটি Pattern এর সাথে স্ট্রিংয়ে মাচিং বা অন্যান্য স্ট্রিং অপারেশন করতে ব্যবহৃত হয়।
Matcher Class এর কিছু গুরুত্বপূর্ণ মেথড:
matches():- পুরো স্ট্রিংটি প্যাটার্নের সাথে মেলে কিনা তা চেক করে।
find():- এটি স্ট্রিংয়ের মধ্যে প্যাটার্নটি খুঁজে বের করে। এটি একে একে স্ট্রিংয়ের বিভিন্ন অংশে প্যাটার্ন খুঁজে দেখতে সাহায্য করে।
replaceAll(String replacement):- এটি স্ট্রিংয়ের যে অংশ প্যাটার্নের সাথে মেলে, তা প্রতিস্থাপন করে একটি নতুন স্ট্রিং তৈরি করে।
group():- এটি মেচড প্যাটার্নের গ্রুপের মান রিটার্ন করে, যদি প্যাটার্ন গ্রুপ থাকে।
start():- এটি প্যাটার্নের প্রথম মেলা অংশের সূচনা ইনডেক্স রিটার্ন করে।
Matcher Class উদাহরণ:
import java.util.regex.*;
public class MatcherExample {
public static void main(String[] args) {
String regex = "ab";
String input = "abcab";
// Create a pattern and matcher
Pattern pattern = Pattern.compile(regex);
Matcher matcher = pattern.matcher(input);
// Check if the pattern exists in the input string
while (matcher.find()) {
System.out.println("Found match: " + matcher.group() + " at index: " + matcher.start());
}
}
}
আউটপুট:
Found match: ab at index: 0
Found match: ab at index: 3
PatternSyntaxException ক্লাস:
PatternSyntaxException হল একটি এক্সেপশন যা Pattern.compile() বা অন্য কোনো প্যাটার্ন কম্পাইলিং অপারেশনে যদি কোনো সঠিক রেগুলার এক্সপ্রেশন সিনট্যাক্স না থাকে তবে ঘটে।
PatternSyntaxException উদাহরণ:
import java.util.regex.*;
public class PatternSyntaxExceptionExample {
public static void main(String[] args) {
try {
// Invalid regex that will throw a PatternSyntaxException
Pattern pattern = Pattern.compile("[a-z");
} catch (PatternSyntaxException e) {
System.out.println("Invalid regex pattern: " + e.getDescription());
}
}
}
আউটপুট:
Invalid regex pattern: Unclosed character class near index 4
[a-z
^
java.util.regex প্যাকেজের প্রধান উপকারিতা:
- স্ট্রিং মাচিং:
- Java Regex দিয়ে আপনি একটি স্ট্রিংয়ের মধ্যে নির্দিষ্ট প্যাটার্ন মেলানো, খোঁজা এবং বিভিন্ন কার্যকলাপ করতে পারেন।
- স্ট্রিং রিপ্লেসমেন্ট:
- আপনি স্ট্রিংয়ের কোনো অংশকে রিপ্লেস করতে পারেন, যেমন কোনো নির্দিষ্ট শব্দ বা প্যাটার্ন প্রতিস্থাপন করা।
- স্ট্রিং সেগমেন্টেশন (Splitting):
- রেগুলার এক্সপ্রেশন দিয়ে আপনি স্ট্রিং বিভক্ত করতে পারেন, যেমন কমা বা সেমিকোলন দ্বারা স্ট্রিং ভাগ করা।
- ডেটা ভ্যালিডেশন:
- রেগুলার এক্সপ্রেশন দিয়ে আপনি ডেটা ভ্যালিডেশন করতে পারেন, যেমন ইমেইল অ্যাড্রেস, ফোন নম্বর বা অন্য কোনো প্যাটার্ন যাচাই করা।
java.util.regex প্যাকেজটি Java-তে রেগুলার এক্সপ্রেশন ম্যানিপুলেশন এবং স্ট্রিং মাচিংয়ের জন্য একটি শক্তিশালী এবং দরকারী টুল। এটি স্ট্রিং প্যাটার্ন মাচিং, ডেটা ভ্যালিডেশন, স্ট্রিং পরিবর্তন এবং বিভক্তি ইত্যাদি কাজের জন্য ব্যবহৃত হয়। Pattern এবং Matcher ক্লাসের সাহায্যে আপনি সহজেই রেগুলার এক্সপ্রেশন ব্যবহার করে টেক্সট অপারেশন করতে পারবেন।
Read more