Java Regex (Regular Expressions) একটি শক্তিশালী টুল যা স্ট্রিং ম্যানিপুলেশন এবং প্যাটার্ন ম্যাচিংয়ের জন্য ব্যবহৃত হয়। java.util.regex প্যাকেজে Regex সম্পর্কিত ক্লাসগুলো পাওয়া যায়, যেমন Pattern এবং Matcher, যা স্ট্রিংয়ের মধ্যে প্যাটার্ন মেলানো এবং ম্যাচ করা সম্ভব করে।
নিচে Regex-এর বেসিক সিনট্যাক্স এবং এর উপাদানগুলোর ব্যাখ্যা দেওয়া হলো:
1. বেসিক সিনট্যাক্স
.(ডট) - যেকোনো একক অক্ষর- উদাহরণ:
a.b- এটি এমন স্ট্রিং match করবে যেগুলোর মধ্যেaএবংbএর মধ্যে একটি অক্ষর আছে, যেমনaxb,acb, ইত্যাদি।
- উদাহরণ:
^(Caret) - স্ট্রিংয়ের শুরু- উদাহরণ:
^a- এটি এমন স্ট্রিং match করবে যাaদিয়ে শুরু হয়, যেমনapple,a123।
- উদাহরণ:
$(ডল্যার সাইন) - স্ট্রিংয়ের শেষ- উদাহরণ:
a$- এটি এমন স্ট্রিং match করবে যাaদিয়ে শেষ হয়, যেমনbanana,idea।
- উদাহরণ:
[](Character Class) - চরিত্রের গ্রুপ- উদাহরণ:
[abc]- এটিa,b, বাc-এর যেকোনো একটিকে ম্যাচ করবে। উদাহরণ:cat,bat,rat।
- উদাহরণ:
[^](Negated Character Class) - বিশেষ চরিত্রের গ্রুপ থেকে বাদ দেওয়া- উদাহরণ:
[^a]- এটিaছাড়া অন্য যেকোনো চরিত্র match করবে, যেমনb,c,z।
- উদাহরণ:
|(OR অপারেটর) - দুইটি প্যাটার্নের মধ্যে একটির মিল- উদাহরণ:
a|b- এটি এমন স্ট্রিং match করবে যাaবাbএর মধ্যে যেকোনো একটির উপস্থিতি রয়েছে, যেমনapple,bat।
- উদাহরণ:
()(গ্রুপিং) - প্যাটার্ন গ্রুপ করা- উদাহরণ:
(ab)+- এটিabএর একাধিক পুনরাবৃত্তি match করবে, যেমনabab,ababab।
- উদাহরণ:
2. Quantifiers (মাত্রিক নির্দেশক)
*- শূন্য বা আরও বার- উদাহরণ:
a*b- এটি এমন স্ট্রিং match করবে যেখানেaশূন্য বা একাধিক বার এবং তার পরেbরয়েছে, যেমনb,ab,aaab।
- উদাহরণ:
+- এক বা আরও বার- উদাহরণ:
a+b- এটি এমন স্ট্রিং match করবে যেখানেaঅন্তত একবার এবং তার পরেbরয়েছে, যেমনab,aaab।
- উদাহরণ:
?- শূন্য বা একবার- উদাহরণ:
a?b- এটি এমন স্ট্রিং match করবে যেখানেaএকবার বা শূন্যবার এবং তার পরেbরয়েছে, যেমনb,ab।
- উদাহরণ:
{n}- নির্দিষ্ট সংখ্যক বার- উদাহরণ:
a{3}- এটি এমন স্ট্রিং match করবে যেখানেaঠিক তিনবার আছে, যেমনaaa।
- উদাহরণ:
{n,}- ন্যূনতমnবার- উদাহরণ:
a{2,}- এটি এমন স্ট্রিং match করবে যেখানেaঅন্তত দুটি বার রয়েছে, যেমনaa,aaa,aaaa।
- উদাহরণ:
{n,m}- নির্দিষ্ট পরিসরে- উদাহরণ:
a{2,4}- এটি এমন স্ট্রিং match করবে যেখানেaদুটি থেকে চারটি বার রয়েছে, যেমনaa,aaa,aaaa।
- উদাহরণ:
3. Special Characters
\d- একটি ডিজিট (0-9)- উদাহরণ:
\d{2,4}- দুটি থেকে চারটি ডিজিট থাকা স্ট্রিং match করবে, যেমন12,1234।
- উদাহরণ:
\D- একটি নন-ডিজিট (অর্থাৎ, 0-9 নয়)- উদাহরণ:
\D+- এটি এমন স্ট্রিং match করবে যেখানে কোনো ডিজিট নেই, যেমনabc,hello।
- উদাহরণ:
\w- একটি শব্দের অক্ষর (অক্ষর, ডিজিট বা আন্ডারস্কোর)- উদাহরণ:
\w+- এটি একটি বা একাধিক শব্দের অক্ষর match করবে, যেমনabc,hello123,test_1।
- উদাহরণ:
\W- একটি নন-শব্দের অক্ষর- উদাহরণ:
\W+- এটি এমন স্ট্রিং match করবে যেখানে কোনো শব্দের অক্ষর নেই, যেমন!@#, ।
- উদাহরণ:
\s- স্পেস, ট্যাব, নিউলাইন, বা অন্য হোয়াইটস্পেস- উদাহরণ:
\s+- এটি এক বা একাধিক হোয়াইটস্পেস match করবে, যেমন ,\t,\n।
- উদাহরণ:
\S- নন-স্পেস অক্ষর- উদাহরণ:
\S+- এটি এক বা একাধিক নন-স্পেস অক্ষর match করবে, যেমনabc,123.
- উদাহরণ:
\b- শব্দের সীমানা- উদাহরণ:
\bword\b- এটি পুরো শব্দের মতোwordস্ট্রিং match করবে, যেমনword, কিন্তুswordবাword123এর সাথে মিলবে না।
- উদাহরণ:
\B- নন-বোর্ডার- উদাহরণ:
\Bword\B- এটি এমন স্ট্রিং match করবে যেখানেwordশব্দটি শব্দ সীমানার মধ্যে নেই, যেমনsword,word123।
- উদাহরণ:
4. Example of Using Regular Expressions in Java
import java.util.regex.*;
public class RegexExample {
public static void main(String[] args) {
String text = "The price of the car is 30000 dollars.";
// Create a pattern to match digits
Pattern pattern = Pattern.compile("\\d+");
Matcher matcher = pattern.matcher(text);
// Find all the numbers in the text
while (matcher.find()) {
System.out.println("Found number: " + matcher.group());
}
}
}
ব্যাখ্যা:
Pattern.compile("\\d+"): এটি একটি রেগুলার এক্সপ্রেশন তৈরি করে যা একটি বা একাধিক ডিজিটকে ম্যাচ করবে।matcher.find(): এটি স্ট্রিংয়ের মধ্যে রেগুলার এক্সপ্রেশন দ্বারা মিল পাওয়া অংশ খুঁজে বের করবে।matcher.group(): এটি ম্যাচ হওয়া অংশকে ফিরিয়ে দেবে।
Regex জাভাতে একটি খুবই শক্তিশালী টুল যা স্ট্রিংয়ের ভিতরে প্যাটার্ন খুঁজে বের করার জন্য ব্যবহৃত হয়। এর বেসিক সিনট্যাক্স ব্যবহার করে আপনি সহজেই স্ট্রিং ম্যাচিং, স্ট্রিং পরিবর্তন, অথবা স্ট্রিং বিশ্লেষণ করতে পারেন। জাভাতে Pattern এবং Matcher ক্লাসের মাধ্যমে regex ব্যবহার করা হয়, যা স্ট্রিং ম্যানিপুলেশন আরও সহজ ও দ্রুত করে তোলে।
Java Reflection Package (java.lang.reflect) এবং Regular Expressions (Regex) এর মধ্যে কিছুটা বিভ্রান্তি হতে পারে, তবে Literal Characters এবং Meta Characters মূলত Regular Expressions-এর (Regex) ধারণা। এই ধারণাগুলি জাভাতে স্ট্রিং প্যাটার্ন ম্যাচিংয়ের জন্য ব্যবহৃত হয়। আসুন, Literal Characters এবং Meta Characters এর ধারণা স্পষ্টভাবে আলোচনা করি:
Literal Characters এবং Meta Characters এর মধ্যে পার্থক্য
Literal Characters (লিটারাল ক্যারেক্টার):
- লিটারাল ক্যারেক্টার হলো সেই ক্যারেক্টার বা অক্ষর, যেগুলি সরাসরি ব্যবহৃত হয় এবং কোনো বিশেষ অর্থ প্রদান করে না। এগুলি সাধারণ অক্ষর, সংখ্যা বা প্রতীক হতে পারে যা রেগুলার এক্সপ্রেশন (Regex) এর অংশ হিসেবে ব্যবহার করা হয়।
উদাহরণ:
"a","1","b","%"— এগুলি লিটারাল ক্যারেক্টার, কারণ এগুলি কোনো বিশেষ Regex অপারেশন প্রকাশ করে না। এগুলি সরাসরি মিল করা হয় এবং কোনো মেটা-অপারেটরের মতো আচরণ করে না।
উদাহরণ হিসেবে, আপনি যদি
"apple"শব্দটি ম্যাচ করতে চান, তবে"apple"একটি লিটারাল ক্যারেক্টার প্যাটার্ন হবে।Meta Characters (মেটা ক্যারেক্টার):
- মেটা ক্যারেক্টারগুলি এমন বিশেষ অক্ষর যা Regex-এ একটি বিশেষ ফাংশন বা বৈশিষ্ট্য নির্দেশ করে। এগুলি প্যাটার্ন ম্যাচিং বা স্ট্রিং সাপোর্ট এবং অন্যান্য কাজ করার জন্য ব্যবহার করা হয়। মেটা ক্যারেক্টারগুলি রেগুলার এক্সপ্রেশনকে শক্তিশালী করে তোলে, কারণ তারা স্ট্রিংয়ের বিভিন্ন ধরণের ম্যাচিং অপারেশন সহজ করে তোলে।
উদাহরণ:
.(ডট): কোনো একক ক্যারেক্টারকে ম্যাচ করবে।^: স্ট্রিংয়ের শুরু।$: স্ট্রিংয়ের শেষ।[]: একটি ক্যারেক্টার ক্লাস, যেখানে একাধিক ক্যারেক্টার বা ক্যারেক্টারের যেকোনো একটি ম্যাচ হবে।*: শূন্য বা একাধিক পুনরাবৃত্তি।+: এক বা একাধিক পুনরাবৃত্তি।?: শূন্য বা একবার।|: OR অপারেটর।
Literal Characters উদাহরণ:
এটি স্ট্রিংয়ের মধ্যে সেই অক্ষরের সাথে সরাসরি মিল করবে যা আপনি প্যাটার্ন হিসেবে ব্যবহার করেছেন:
import java.util.regex.*;
public class LiteralCharacterExample {
public static void main(String[] args) {
String text = "apple";
// Create pattern to match the literal word "apple"
Pattern pattern = Pattern.compile("apple");
Matcher matcher = pattern.matcher(text);
// If the literal word "apple" matches, it will return true
if (matcher.find()) {
System.out.println("Match found: " + matcher.group());
}
}
}
Output:
Match found: apple
এখানে "apple" একটি লিটারাল প্যাটার্ন হিসেবে ব্যবহৃত হয়েছে, যা স্ট্রিংয়ের মধ্যে সঠিকভাবে মিলে গেছে।
Meta Characters উদাহরণ:
এগুলো রেগুলার এক্সপ্রেশন প্যাটার্নে বিশেষ কাজ করে, যেমন প্যাটার্নের মধ্যে স্থানচ্যুতি, মিল খোঁজা ইত্যাদি।
import java.util.regex.*;
public class MetaCharacterExample {
public static void main(String[] args) {
String text = "apple 123";
// Create pattern to match one or more digits using "+"
Pattern pattern = Pattern.compile("\\d+"); // \d+ matches one or more digits
Matcher matcher = pattern.matcher(text);
// Find and print all the matches for digits
while (matcher.find()) {
System.out.println("Match found: " + matcher.group());
}
}
}
Output:
Match found: 123
এখানে \\d+ একটি মেটা ক্যারেক্টার প্যাটার্ন, যা এক বা একাধিক ডিজিট মেলার জন্য ব্যবহৃত হয়েছে। এটি "123" কে ম্যাচ করেছে, কারণ \\d+ প্যাটার্নটি ডিজিটের একটি বা একাধিক পুনরাবৃত্তি ম্যাচ করবে।
মেটা ক্যারেক্টারের তালিকা:
.(ডট): যেকোনো একক ক্যারেক্টার। উদাহরণ:a.b- এটি"acb","abb"ইত্যাদির সাথে মিলে যাবে।^(Caret): স্ট্রিংয়ের শুরু। উদাহরণ:^a- এটি শুধুমাত্র সেসব স্ট্রিংয়ের সাথে মেলে যেগুলিaদিয়ে শুরু হয়।$(Dollar Sign): স্ট্রিংয়ের শেষ। উদাহরণ:a$- এটি এমন স্ট্রিংয়ের সাথে মিলে যেখানেaশেষ অক্ষর।[](Character Classes): একাধিক ক্যারেক্টার। উদাহরণ:[abc]- এটিa,b, অথবাcযে কোন একটির সাথে মেলে।*(Asterisk): শূন্য বা একাধিক পুনরাবৃত্তি। উদাহরণ:a*- এটি"","a","aa"ইত্যাদির সাথে মেলে।+(Plus Sign): এক বা একাধিক পুনরাবৃত্তি। উদাহরণ:a+- এটি"a","aa","aaa"ইত্যাদির সাথে মেলে।?(Question Mark): শূন্য বা একবার। উদাহরণ:a?- এটি"a"বা""(শূন্য) এর সাথে মেলে।{n,m}: নির্দিষ্ট সংখ্যক পুনরাবৃত্তি। উদাহরণ:a{2,4}- এটি"aa","aaa","aaaa"এর সাথে মেলে।\d: একটি ডিজিট (0-9)। উদাহরণ:\d{2}- এটি12,99ইত্যাদি ২ ডিজিট সংখ্যা ম্যাচ করবে।\w: একটি শব্দের অক্ষর (অক্ষর, ডিজিট, আন্ডারস্কোর)। উদাহরণ:\w+- এটিabc,123,_underscoreইত্যাদি ম্যাচ করবে।\s: হোয়াইটস্পেস (স্পেস, ট্যাব, নিউলাইন ইত্যাদি)। উদাহরণ:\s+- এটি এক বা একাধিক হোয়াইটস্পেসের সাথে মিলবে।|(OR): অথবা অপারেটর। উদাহরণ:a|b- এটিaঅথবাbএর সাথে মিলবে।
- Literal characters হলো সাধারণ অক্ষর যা কোনো বিশেষ অর্থ বহন করে না, এবং সরাসরি স্ট্রিং প্যাটার্ন হিসেবে ব্যবহার হয়।
- Meta characters হলো বিশেষ চিহ্ন যা রেগুলার এক্সপ্রেশনগুলোকে শক্তিশালী করে তোলে, যেমন
*,+,[],|ইত্যাদি, যা স্ট্রিং প্যাটার্নে বিভিন্ন ধরনের ম্যাচিং অপারেশন করতে সাহায্য করে।
যখন আপনি স্ট্রিং ম্যানিপুলেশন করতে চান, তখন রেগুলার এক্সপ্রেশন খুবই কার্যকরী হয়, তবে মেটা ক্যারেক্টারগুলি কেবলমাত্র প্যাটার্ন মেলানোর জন্য ব্যবহার করা হয়, এবং লিটারাল ক্যারেক্টারগুলি স্ট্রিংয়ের সরাসরি অংশ হিসেবে ব্যবহৃত হয়।
Java Reflection প্যাকেজের সাথে Regular Expressions বা Regex এর ব্যবহার পৃথক বিষয় হলেও, আপনি যদি java.lang.reflect প্যাকেজ ব্যবহার করেন, তবে আপনি Regular Expressions (Regex) এর মধ্যে Literal Characters এবং Meta Characters এর ধারণা সম্পর্কে জানতে পারবেন।
এখানে আমরা Character Classes এর ধারণা নিয়ে আলোচনা করবো, যেগুলি regex এর মধ্যে ব্যবহৃত হয়। এই Character Classes ব্যবহৃত হয় স্ট্রিং প্যাটার্ন খুঁজে বের করার জন্য।
Character Classes in Regular Expressions:
Character Classes হলো এমন প্যাটার্ন যা আপনাকে একাধিক চরিত্রের মধ্যে থেকে একটি চরিত্র নির্বাচন করতে দেয়। এই ক্লাসগুলি সাধারণত ব্র্যাকেট [ ] এর মধ্যে লেখা হয়। Character Classes স্ট্রিং ম্যানিপুলেশন এবং প্যাটার্ন ম্যাচিংয়ের জন্য খুবই শক্তিশালী এবং বহুল ব্যবহৃত।
1. [abc] (Character Class):
এই ক্লাসটি একটি প্যাটার্নে a, b, অথবা c-এর যেকোনো একটি চরিত্র মেলাবে।
উদাহরণ:
import java.util.regex.*;
public class RegexExample {
public static void main(String[] args) {
String text = "apple banana cat";
Pattern pattern = Pattern.compile("[abc]"); // Match 'a', 'b', or 'c'
Matcher matcher = pattern.matcher(text);
while (matcher.find()) {
System.out.println("Found: " + matcher.group());
}
}
}
আউটপুট:
Found: a
Found: a
Found: b
Found: a
Found: c
এখানে, [abc] স্ট্রিংয়ের মধ্যে a, b, অথবা c যেকোনো একটি চরিত্র খুঁজে বের করেছে।
2. [^abc] (Negated Character Class):
এটি একটি নেগেটেড চরিত্র ক্লাস, যার মাধ্যমে আপনি এমন প্যাটার্ন মেলাতে পারেন যা a, b, অথবা c ছাড়া অন্য কোনো চরিত্র মেলে।
উদাহরণ:
import java.util.regex.*;
public class RegexExample {
public static void main(String[] args) {
String text = "apple banana cat";
Pattern pattern = Pattern.compile("[^abc]"); // Match any character except 'a', 'b', or 'c'
Matcher matcher = pattern.matcher(text);
while (matcher.find()) {
System.out.println("Found: " + matcher.group());
}
}
}
আউটপুট:
Found: p
Found: l
Found: e
Found: n
Found: n
Found: n
Found: t
এখানে, [^abc] প্যাটার্নটি এমন চরিত্রগুলো মেলাতে ব্যবহার করা হয়েছে যা a, b, বা c নয়।
3. [a-zA-Z] (Character Range Class):
এটি একটি চরিত্র রেঞ্জ ক্লাস, যা ইংরেজি বর্ণমালার সব ছোট এবং বড় হাতের অক্ষরগুলো মেলাতে ব্যবহৃত হয়।
উদাহরণ:
import java.util.regex.*;
public class RegexExample {
public static void main(String[] args) {
String text = "apple Banana CAT 123";
Pattern pattern = Pattern.compile("[a-zA-Z]"); // Match any letter (lowercase or uppercase)
Matcher matcher = pattern.matcher(text);
while (matcher.find()) {
System.out.println("Found: " + matcher.group());
}
}
}
আউটপুট:
Found: a
Found: p
Found: p
Found: l
Found: e
Found: B
Found: a
Found: n
Found: a
Found: n
Found: a
Found: C
Found: A
Found: T
এখানে, [a-zA-Z] প্যাটার্নটি সমস্ত ছোট এবং বড় হাতের অক্ষরগুলো মেলাতে ব্যবহার করা হয়েছে।
Additional Notes on Character Classes:
- Character Ranges:
[a-z]: এটি সব ছোট হাতের ইংরেজি অক্ষরকে মেলাবে (যেমনa,b, ...,z)।[A-Z]: এটি সব বড় হাতের ইংরেজি অক্ষরকে মেলাবে (যেমনA,B, ...,Z)।[0-9]: এটি সব ডিজিটকে মেলাবে (যেমন0,1, ...,9)।
- Combining Ranges:
[a-zA-Z]: ছোট এবং বড় হাতের অক্ষরের সমস্ত ক্যারেক্টার মেলাতে পারে।[0-9a-fA-F]: এটি হেক্সাডেসিমাল সংখ্যার সব ক্যারেক্টার মেলাতে ব্যবহার হয়।
- Predefined Character Classes:
\d: একটি ডিজিট (0-9)।\D: একটি নন-ডিজিট (0-9 নয়)।\w: একটি শব্দের অক্ষর (অক্ষর, ডিজিট বা আন্ডারস্কোর)।\W: একটি নন-শব্দের অক্ষর (যেমন স্পেস, পাঙ্কচুয়েশন চিহ্ন)।
- Character Classes হল রেগুলার এক্সপ্রেশন (Regex) এর শক্তিশালী বৈশিষ্ট্য যা স্ট্রিংয়ের মধ্যে বিভিন্ন ধরনের অক্ষর বা চরিত্রের গোষ্ঠী খুঁজে বের করার জন্য ব্যবহৃত হয়।
[abc],[^abc], এবং[a-zA-Z]এর মতো প্যাটার্ন ব্যবহার করে আপনি স্ট্রিংয়ের নির্দিষ্ট ধরনের চরিত্র মেলাতে পারেন।- রেগুলার এক্সপ্রেশন ব্যবহারে আপনার স্ট্রিং ম্যাচিং এবং ম্যানিপুলেশন কার্যকর এবং দক্ষ হতে পারে, তবে এটি বুঝে এবং সঠিকভাবে ব্যবহার করতে হবে।
এই ধারণাগুলি ব্যবহার করে আপনি জাভা রেগুলার এক্সপ্রেশন দিয়ে স্ট্রিং ম্যানিপুলেশন কাজগুলো আরও সহজ এবং কার্যকরভাবে করতে পারবেন।
Java Regular Expressions (Regex) ব্যবহারে কিছু predefined character classes রয়েছে, যেগুলি খুবই সাধারণ এবং ব্যবহার করা সহজ। এগুলি বিশেষ প্যাটার্নের জন্য নির্দিষ্ট অর্থ বহন করে এবং regex লেখা অনেক সহজ করে তোলে। \d, \w, \s, \D, \W, \S এগুলি Java regex এর predefined character classes। এগুলির মধ্যে প্রতিটি একটি নির্দিষ্ট ধরনের ক্যারেক্টার বা স্ট্রিংকে মেলানোর জন্য ব্যবহৃত হয়।
নিচে প্রতিটি predefined character class এবং তাদের ব্যবহার সম্পর্কে বিস্তারিত আলোচনা করা হলো।
1. \d: Match any digit (0-9)
\dএকটি digit এর জন্য regex প্যাটার্ন। এটি 0 থেকে 9 এর মধ্যে যেকোনো একক সংখ্যা মেলে।
ব্যবহার:
\dএমন যে কোনও সংখ্যা মেলাতে ব্যবহার করা হয়, যেমন: phone numbers, zip codes ইত্যাদি।
উদাহরণ:
import java.util.regex.*;
public class RegexExample {
public static void main(String[] args) {
// Regex pattern to match a digit
String pattern = "\\d";
// String to search
String text = "abc123";
// Compile the pattern
Pattern p = Pattern.compile(pattern);
// Create a matcher to find the pattern in the text
Matcher m = p.matcher(text);
// Find digits in the text
while (m.find()) {
System.out.println("Digit found: " + m.group());
}
}
}
আউটপুট:
Digit found: 1
Digit found: 2
Digit found: 3
2. \w: Match any word character (alphanumeric + underscore)
\wদ্বারা word characters (অলফাবেট, সংখ্যা, এবং আন্ডারস্কোর) মেলে। এটি ইংরেজি অক্ষর (lowercase বা uppercase), সংখ্যা (0-9), এবং আন্ডারস্কোর (_) কে মেলে।
উদাহরণ:
import java.util.regex.*;
public class RegexExample {
public static void main(String[] args) {
// Regex pattern to match a word character
String pattern = "\\w";
// String to search
String text = "Hello_123";
// Compile the pattern
Pattern p = Pattern.compile(pattern);
// Create a matcher to find the pattern in the text
Matcher m = p.matcher(text);
// Find word characters in the text
while (m.find()) {
System.out.println("Word character found: " + m.group());
}
}
}
আউটপুট:
Word character found: H
Word character found: e
Word character found: l
Word character found: l
Word character found: o
Word character found: _
Word character found: 1
Word character found: 2
Word character found: 3
3. \s: Match any whitespace character (spaces, tabs, line breaks)
\sযেকোনো whitespace character মেলে, যেমন space, tab, line breaks (newlines) ইত্যাদি।
উদাহরণ:
import java.util.regex.*;
public class RegexExample {
public static void main(String[] args) {
// Regex pattern to match a whitespace character
String pattern = "\\s";
// String to search
String text = "Hello World!";
// Compile the pattern
Pattern p = Pattern.compile(pattern);
// Create a matcher to find the pattern in the text
Matcher m = p.matcher(text);
// Find whitespace characters in the text
while (m.find()) {
System.out.println("Whitespace character found: " + m.group());
}
}
}
আউটপুট:
Whitespace character found:
4. \D: Match any non-digit character
\Dএমন non-digit character এর জন্য ব্যবহৃত হয়। এটি 0 থেকে 9 ছাড়া যেকোনো কিছু মেলে।
উদাহরণ:
import java.util.regex.*;
public class RegexExample {
public static void main(String[] args) {
// Regex pattern to match non-digit characters
String pattern = "\\D";
// String to search
String text = "abc123";
// Compile the pattern
Pattern p = Pattern.compile(pattern);
// Create a matcher to find the pattern in the text
Matcher m = p.matcher(text);
// Find non-digit characters in the text
while (m.find()) {
System.out.println("Non-digit character found: " + m.group());
}
}
}
আউটপুট:
Non-digit character found: a
Non-digit character found: b
Non-digit character found: c
5. \W: Match any non-word character (anything except alphanumeric + underscore)
\Wএমন non-word characters মেলে, যা\wএর বিপরীত। এটি শুধুমাত্র আলফানিউমেরিক (অক্ষর, সংখ্যা, আন্ডারস্কোর) ছাড়া বাকী সমস্ত ক্যারেক্টার মেলে।
উদাহরণ:
import java.util.regex.*;
public class RegexExample {
public static void main(String[] args) {
// Regex pattern to match non-word characters
String pattern = "\\W";
// String to search
String text = "Hello@123";
// Compile the pattern
Pattern p = Pattern.compile(pattern);
// Create a matcher to find the pattern in the text
Matcher m = p.matcher(text);
// Find non-word characters in the text
while (m.find()) {
System.out.println("Non-word character found: " + m.group());
}
}
}
আউটপুট:
Non-word character found: @
6. \S: Match any non-whitespace character
\Sহল non-whitespace character এর জন্য। এটি\sএর বিপরীত এবং সমস্ত স্পেস, ট্যাব, এবং নিউলাইন ছাড়া যেকোনো ক্যারেক্টার মেলে।
উদাহরণ:
import java.util.regex.*;
public class RegexExample {
public static void main(String[] args) {
// Regex pattern to match non-whitespace characters
String pattern = "\\S";
// String to search
String text = "Hello World!";
// Compile the pattern
Pattern p = Pattern.compile(pattern);
// Create a matcher to find the pattern in the text
Matcher m = p.matcher(text);
// Find non-whitespace characters in the text
while (m.find()) {
System.out.println("Non-whitespace character found: " + m.group());
}
}
}
আউটপুট:
Non-whitespace character found: H
Non-whitespace character found: e
Non-whitespace character found: l
Non-whitespace character found: l
Non-whitespace character found: o
Non-whitespace character found: W
Non-whitespace character found: o
Non-whitespace character found: r
Non-whitespace character found: l
Non-whitespace character found: d
Non-whitespace character found: !
Java Regular Expressions (Regex) এর predefined character classes যেমন \d, \w, \s, \D, \W, \S খুবই শক্তিশালী এবং ব্যবহার করা সহজ। এগুলি আপনার Regex প্যাটার্ন লেখার সময় সাধারণ ক্যারেক্টার matching-এর জন্য বিশেষভাবে ব্যবহৃত হয়। এগুলির মাধ্যমে আপনি দ্রুত এবং কার্যকরভাবে স্ট্রিং validation, টেক্সট ম্যানিপুলেশন, এবং ডেটা প্রক্রিয়াকরণ করতে পারেন। Java Regex-এ এই character classes ব্যবহার করলে কোড আরও পরিষ্কার এবং সহজ হয়।
Quantifiers (পরিমাণ নির্দেশক) হল Regex এর গুরুত্বপূর্ণ অংশ যা একটি নির্দিষ্ট প্যাটার্নের পুনরাবৃত্তির সংখ্যা নির্ধারণ করে। Java Regular Expressions এ আপনি Quantifiers ব্যবহার করে একটি প্যাটার্ন কতবার হতে পারে বা হওয়া উচিত তা নির্দিষ্ট করতে পারেন। বিভিন্ন ধরনের Quantifiers যেমন *, +, ?, {n}, {n,}, {n,m} প্রোগ্রামে টেক্সট ম্যাচিং ও বিশ্লেষণের কাজকে সহজ করে।
Quantifiers এর ধরন এবং ব্যবহার
1. * (Asterisk):
- অর্থ: প্যাটার্নটি 0 অথবা তার চেয়ে বেশি বার হতে পারে।
- ব্যবহার: এটি একটি নির্দিষ্ট ক্যারেক্টারের পুনরাবৃত্তি চিহ্নিত করে এবং এটি ওই ক্যারেক্টারটির 0 বা তার অধিক উপস্থিতি মেনে চলে।
উদাহরণ:
a*অর্থাৎ এক বা একাধিকaথাকতে পারে অথবা কোনোaনা-ও থাকতে পারে।- টেক্সট: "aaa", "a", "" (শূন্য স্ট্রিং) সবই এটি ম্যাচ করবে।
Pattern pattern = Pattern.compile("a*");
Matcher matcher = pattern.matcher("aaabaaa");
System.out.println(matcher.matches()); // Output: true
2. + (Plus):
- অর্থ: প্যাটার্নটি 1 অথবা তার চেয়ে বেশি বার হতে পারে।
- ব্যবহার: এটি একটি ক্যারেক্টার বা প্যাটার্নের একবার বা তার অধিক উপস্থিতি নির্দেশ করে।
উদাহরণ:
a+অর্থাৎ এক বা একাধিকaথাকতে হবে (শূন্য সংখ্যা নন)।- টেক্সট: "a", "aa", "aaa" - সবই এটি ম্যাচ করবে, কিন্তু "" (শূন্য স্ট্রিং) ম্যাচ করবে না।
Pattern pattern = Pattern.compile("a+");
Matcher matcher = pattern.matcher("aaabaaa");
System.out.println(matcher.matches()); // Output: true
3. ? (Question Mark):
- অর্থ: প্যাটার্নটি 0 অথবা 1 বার উপস্থিত হতে পারে।
- ব্যবহার: এটি কোনো ক্যারেক্টারের উপস্থিতি প্রয়োজন, কিন্তু এটি ঐ ক্যারেক্টারের উপস্থিতির সংখ্যা 0 অথবা 1 নির্ধারণ করতে সাহায্য করে।
উদাহরণ:
a?অর্থাৎ 0 বা 1 বারaথাকতে পারে।- টেক্সট: "a", "" (শূন্য স্ট্রিং) - এই দুটি স্ট্রিংই ম্যাচ করবে, কিন্তু "aa" ম্যাচ করবে না।
Pattern pattern = Pattern.compile("a?");
Matcher matcher = pattern.matcher("aaabaaa");
System.out.println(matcher.matches()); // Output: false
4. {n} (Exact Count):
- অর্থ: প্যাটার্নটি নির্দিষ্ট সংখ্যক বার উপস্থিত হতে হবে।
- ব্যবহার: এটি প্যাটার্নটি ঠিক n বার উপস্থিত হওয়ার জন্য নির্ধারণ করে।
উদাহরণ:
a{3}অর্থাৎ ঠিক তিনটিaথাকতে হবে।- টেক্সট: "aaa" - এটি ম্যাচ করবে, কিন্তু "aa", "aaaa" এগুলো ম্যাচ করবে না।
Pattern pattern = Pattern.compile("a{3}");
Matcher matcher = pattern.matcher("aaa");
System.out.println(matcher.matches()); // Output: true
5. {n,} (At Least n):
- অর্থ: প্যাটার্নটি n অথবা তার বেশি বার উপস্থিত হতে হবে।
- ব্যবহার: এটি প্যাটার্নটি n অথবা তার বেশি বার উপস্থিত হওয়া প্রয়োজন।
উদাহরণ:
a{2,}অর্থাৎ দুটি বা তার বেশিaথাকতে হবে।- টেক্সট: "aa", "aaa", "aaaa" - সবই এটি ম্যাচ করবে, কিন্তু "a" ম্যাচ করবে না।
Pattern pattern = Pattern.compile("a{2,}");
Matcher matcher = pattern.matcher("aaa");
System.out.println(matcher.matches()); // Output: true
6. {n,m} (Range of Count):
- অর্থ: প্যাটার্নটি n থেকে m বার পর্যন্ত উপস্থিত হতে পারে।
- ব্যবহার: এটি প্যাটার্নটি n থেকে m বার পর্যন্ত উপস্থিত হওয়ার জন্য নির্ধারণ করে।
উদাহরণ:
a{2,4}অর্থাৎ দুই থেকে চারটিaথাকতে হবে।- টেক্সট: "aa", "aaa", "aaaa" - সবই এটি ম্যাচ করবে, কিন্তু "a" এবং "aaaaa" ম্যাচ করবে না।
Pattern pattern = Pattern.compile("a{2,4}");
Matcher matcher = pattern.matcher("aaa");
System.out.println(matcher.matches()); // Output: true
Regex-এর Quantifiers আপনাকে একটি প্যাটার্নের পুনরাবৃত্তি সংখ্যা নির্ধারণ করতে সহায়ক, যা আপনার টেক্সট ম্যানিপুলেশন এবং matching কর্মক্ষমতা সহজ করে তোলে। Java Regex এ *, +, ?, {n}, {n,}, {n,m} এগুলো আপনাকে প্যাটার্নের উপস্থিতি নিয়ন্ত্রণ করতে সাহায্য করে। এগুলোর যথাযথ ব্যবহারের মাধ্যমে আপনি টেক্সট অনুসন্ধান, ভ্যালিডেশন, এবং ম্যানিপুলেশন আরও কার্যকরীভাবে করতে পারবেন।
Read more