Java Regular Expressions (Regex) java.util.regex
প্যাকেজের মাধ্যমে টেক্সট ম্যানিপুলেশন এবং প্যাটার্ন মাচিং করতে ব্যবহৃত হয়। Java-তে রেগুলার এক্সপ্রেশন টেক্সটের বিভিন্ন দিক যেমন স্ট্রিং মাচিং, টেক্সট ভ্যালিডেশন, এবং ডেটা ম্যানিপুলেশন করার জন্য একটি শক্তিশালী টুল।
Unicode হলো একটি আন্তর্জাতিক স্ট্যান্ডার্ড যা পৃথিবীর সব ভাষার অক্ষর এবং চিহ্নকে ইউনিকোড মান প্রদান করে। Java-তে রেগুলার এক্সপ্রেশন (Regex) Unicode সমর্থন করে, যার মাধ্যমে আপনি বিভিন্ন ভাষার অক্ষর বা বিশেষ চিহ্নের উপর প্যাটার্ন মাচিং করতে পারবেন।
Java Regex Unicode সমর্থন করে, যা আপনাকে Unicode চরিত্র এবং সিম্বলকে রেগুলার এক্সপ্রেশন প্যাটার্নের মধ্যে অন্তর্ভুক্ত করতে দেয়। Java 7 এবং পরবর্তী সংস্করণে Unicode প্যাটার্নগুলির সাথে কাজ করা সহজ এবং আরও কার্যকর হয়েছে। Unicode প্যাটার্ন এবং ক্যারেক্টার ক্লাসগুলি দিয়ে আপনি Unicode অক্ষর, ভাষা নির্দিষ্ট অক্ষর, এবং বিশেষ চিহ্ন চিহ্নিত করতে পারেন।
Java রেগুলার এক্সপ্রেশন Unicode অক্ষর এবং সিম্বলকে \u
escape sequence দিয়ে চিহ্নিত করে।
\uXXXX
: এখানে XXXX
হল একটি চার ডিজিটের হেক্সাডেসিমাল সংখ্যা, যা একটি Unicode চরিত্রকে প্রতিনিধিত্ব করে।যেমন, \u0041
হল Unicode escape sequence যা 'A'
অক্ষরকে প্রতিনিধিত্ব করে।
Java রেগুলার এক্সপ্রেশন Unicode সাপোর্টের মাধ্যমে বিশেষ ধরনের character classes ব্যবহার করতে পারে, যেমন:
\p{L}
: এটি Unicode এর সব letter অক্ষর চিহ্নিত করে (অর্থাৎ, সমস্ত অক্ষর, যেমন ইংরেজি, বাংলা, আরবি, চীনা অক্ষর ইত্যাদি)।\p{Lu}
: এটি uppercase letters চিহ্নিত করে।\p{Ll}
: এটি lowercase letters চিহ্নিত করে।\p{N}
: এটি number characters চিহ্নিত করে।\p{P}
: এটি punctuation marks চিহ্নিত করে।এছাড়া, \P{...}
অপারেটরটি negative প্যাটার্ন মাচ করতে ব্যবহৃত হয়। যেমন, \P{L}
এর মানে হল যে এটি letter ছাড়া অন্যান্য সব ক্যারেক্টার মাচ করবে।
\u
import java.util.regex.*;
public class UnicodeRegexExample {
public static void main(String[] args) {
String regex = "\\u0041"; // Unicode for 'A'
String input = "Hello A World";
// Compile regex pattern
Pattern pattern = Pattern.compile(regex);
Matcher matcher = pattern.matcher(input);
// Check if the pattern matches
if (matcher.find()) {
System.out.println("Found Unicode character 'A'");
} else {
System.out.println("Unicode character 'A' not found");
}
}
}
আউটপুট:
Found Unicode character 'A'
কোড বিশ্লেষণ:
\\u0041
হল 'A'
অক্ষরের Unicode escape sequence।"Hello A World"
থেকে 'A'
অক্ষর খুঁজে বের করে।\p{L}
import java.util.regex.*;
public class UnicodeLetterExample {
public static void main(String[] args) {
String regex = "\\p{L}"; // Unicode for any letter
String input = "Hello, 123, こんにちは";
// Compile regex pattern
Pattern pattern = Pattern.compile(regex);
Matcher matcher = pattern.matcher(input);
// Find and print all Unicode letters
while (matcher.find()) {
System.out.println("Found letter: " + matcher.group());
}
}
}
আউটপুট:
Found letter: H
Found letter: e
Found letter: l
Found letter: l
Found letter: o
Found letter: こ
Found letter: ん
Found letter: に
Found letter: ち
Found letter: は
কোড বিশ্লেষণ:
\\p{L}
একটি Unicode letter কে মাচ করবে, এটি ইংরেজি অক্ষর (H, e, l, o) এবং জাপানি অক্ষর (こ, ん, に, ち, は) উভয়ই মাচ করেছে।\p{Lu}
and \p{Ll}
import java.util.regex.*;
public class UpperLowerCaseUnicodeExample {
public static void main(String[] args) {
String regexUppercase = "\\p{Lu}"; // Unicode for uppercase letters
String regexLowercase = "\\p{Ll}"; // Unicode for lowercase letters
String input = "Hello World";
// Compile regex patterns
Pattern patternUppercase = Pattern.compile(regexUppercase);
Pattern patternLowercase = Pattern.compile(regexLowercase);
// Create matchers for both patterns
Matcher matcherUppercase = patternUppercase.matcher(input);
Matcher matcherLowercase = patternLowercase.matcher(input);
// Find and print uppercase letters
System.out.println("Uppercase letters:");
while (matcherUppercase.find()) {
System.out.println(matcherUppercase.group());
}
// Find and print lowercase letters
System.out.println("Lowercase letters:");
while (matcherLowercase.find()) {
System.out.println(matcherLowercase.group());
}
}
}
আউটপুট:
Uppercase letters:
H
W
Lowercase letters:
e
l
l
o
o
r
l
d
কোড বিশ্লেষণ:
\\p{Lu}
হল Unicode uppercase letters এবং \\p{Ll}
হল Unicode lowercase letters।"Hello World"
স্ট্রিংটির মধ্যে বড় হাতের (uppercase) এবং ছোট হাতের (lowercase) অক্ষরগুলি আলাদা করে মাচ করা হয়েছে।\P{L}
import java.util.regex.*;
public class NonLetterExample {
public static void main(String[] args) {
String regex = "\\P{L}"; // Unicode for non-letter characters
String input = "Hello 123! World";
// Compile regex pattern
Pattern pattern = Pattern.compile(regex);
Matcher matcher = pattern.matcher(input);
// Find and print all non-letter characters
while (matcher.find()) {
System.out.println("Found non-letter: " + matcher.group());
}
}
}
আউটপুট:
Found non-letter:
Found non-letter: 1
Found non-letter: 2
Found non-letter: 3
Found non-letter: !
Found non-letter:
Found non-letter:
কোড বিশ্লেষণ:
\\P{L}
এই রেগুলার এক্সপ্রেশনটি Unicode non-letter characters (যেমন স্পেস, ডিজিট, পাঙ্কচুয়েশন) চিহ্নিত করে।"Hello 123! World"
থেকে non-letter অংশগুলি মাচ করেছে।Java রেগুলার এক্সপ্রেশন (Regex) এর মধ্যে Unicode Character Matching খুবই গুরুত্বপূর্ণ, বিশেষ করে যখন আপনি বিভিন্ন ভাষা বা স্ক্রিপ্টের অক্ষরের সাথে কাজ করছেন। Unicode-এর সাহায্যে বিভিন্ন ভাষার অক্ষরগুলোকে একক স্ট্যান্ডার্ডে একত্রিত করা সম্ভব হয়। Java রেগুলার এক্সপ্রেশন প্যাটার্নে Unicode Character Matching এবং \p{IsLatin}, \p{IsGreek} এর মত Unicode Property Escapes ব্যবহার করা যায়, যা একটি নির্দিষ্ট ইউনিকোড ব্লকের মধ্যে চরিত্রগুলি মেলানোর জন্য সাহায্য করে।
Unicode Character Matching ব্যবহার করে, আপনি নির্দিষ্ট ইউনিকোড ব্লক বা স্ক্রিপ্টের অক্ষরের সাথে ম্যাচ করতে পারেন। Java রেগুলার এক্সপ্রেশন \p{}
সিম্বলের মাধ্যমে ইউনিকোড ব্লক বা প্রপার্টি নির্দিষ্ট করে ম্যাচিং করতে সক্ষম।
\p{}
Syntax:\p{Is<ScriptName>}
: এটি ইউনিকোড স্ক্রিপ্ট বা ব্লক দিয়ে চরিত্রগুলোর ম্যাচ চেক করতে ব্যবহৃত হয়।\p{}
এর মধ্যে ইউনিকোড স্ক্রিপ্ট বা প্রপার্টি সন্নিবেশ করা হয়।উদাহরণস্বরূপ, আপনি \p{IsLatin}
ব্যবহার করে ল্যাটিন অক্ষরগুলোর সাথে ম্যাচ করতে পারবেন, বা \p{IsGreek}
ব্যবহার করে গ্রিক অক্ষরগুলোর সাথে।
\p{IsLatin}
এবং \p{IsGreek}
এর ব্যবহার:\p{IsLatin}
:এটি সমস্ত ল্যাটিন অক্ষর (A-Z, a-z, 0-9 এবং কিছু অন্যান্য ক্যারেক্টার) মেলানোর জন্য ব্যবহার করা হয়।
\p{IsGreek}
:এটি সমস্ত গ্রিক অক্ষর (α, β, γ, δ, ... etc) মেলানোর জন্য ব্যবহৃত হয়।
\p{IsLatin}
এবং \p{IsGreek}
ব্যবহার করা:import java.util.regex.*;
public class UnicodeCharacterMatchingExample {
public static void main(String[] args) {
// Pattern for Latin characters
Pattern latinPattern = Pattern.compile("[\\p{IsLatin}]+");
// Test string with Latin characters
Matcher latinMatcher = latinPattern.matcher("Hello World");
System.out.println("Latin Match: " + latinMatcher.matches()); // Output: true
// Pattern for Greek characters
Pattern greekPattern = Pattern.compile("[\\p{IsGreek}]+");
// Test string with Greek characters
Matcher greekMatcher = greekPattern.matcher("Γειά σας");
System.out.println("Greek Match: " + greekMatcher.matches()); // Output: true
// Test string that contains both Latin and Greek characters
Matcher mixedMatcher = latinPattern.matcher("Hello Γειά");
System.out.println("Mixed Match: " + mixedMatcher.matches()); // Output: false
}
}
Latin Match: true
Greek Match: true
Mixed Match: false
\p{IsLatin}
: এই প্যাটার্নটি শুধুমাত্র ল্যাটিন অক্ষর (যেমন, A-Z
, a-z
) মেলাতে ব্যবহৃত হয়েছে। স্ট্রিং "Hello World"
পুরোপুরি ল্যাটিন অক্ষরের মধ্যে রয়েছে, তাই এটি সফলভাবে ম্যাচ করেছে।\p{IsGreek}
: এই প্যাটার্নটি গ্রিক অক্ষরের মধ্যে মেলানোর জন্য ব্যবহৃত হয়েছে। "Γειά σας"
এই গ্রিক স্ট্রিংটি সম্পূর্ণ গ্রিক অক্ষরের মধ্যে রয়েছে, তাই এটি ম্যাচ করেছে।"Hello Γειά"
স্ট্রিংটি একাধিক ভাষার অক্ষর ধারণ করে, তাই এটি শুধু ল্যাটিন অক্ষরের জন্য ম্যাচ হবে না।Unicode Property Escapes (যেমন \p{IsLatin}
, \p{IsGreek}
) ব্যবহার করা হয় স্ট্রিংয়ের মধ্যে নির্দিষ্ট ইউনিকোড ক্যাটেগরি বা স্ক্রিপ্টের অক্ষরগুলো ম্যাচ করতে। এই প্যাটার্নগুলো ইউনিকোড প্রপার্টি সিস্টেমের অধীনে কাজ করে, যা Unicode ডাটাবেসে প্রতিটি ক্যারেক্টারের বৈশিষ্ট্য সংজ্ঞায়িত করা হয়েছে।
\p{IsLatin}
: ল্যাটিন স্ক্রিপ্টের চরিত্র।\p{IsGreek}
: গ্রিক স্ক্রিপ্টের চরিত্র।\p{IsCyrillic}
: সিরিলিক স্ক্রিপ্টের চরিত্র।\p{IsArabic}
: আরবিক স্ক্রিপ্টের চরিত্র।\p{IsHiragana}
: হিরাগানা স্ক্রিপ্টের চরিত্র।import java.util.regex.*;
public class UnicodePatternExample {
public static void main(String[] args) {
// Matching Latin characters
Pattern latinPattern = Pattern.compile("[\\p{IsLatin}]+");
// Matching Greek characters
Pattern greekPattern = Pattern.compile("[\\p{IsGreek}]+");
// Test strings
String latinText = "Hello";
String greekText = "Χαίρετε";
// Matching Latin Text
Matcher latinMatcher = latinPattern.matcher(latinText);
System.out.println("Latin Match: " + latinMatcher.matches()); // true
// Matching Greek Text
Matcher greekMatcher = greekPattern.matcher(greekText);
System.out.println("Greek Match: " + greekMatcher.matches()); // true
// Test Mixed Characters
String mixedText = "Hello Χαίρετε";
Matcher mixedMatcher = latinPattern.matcher(mixedText);
System.out.println("Mixed Match: " + mixedMatcher.matches()); // false
}
}
Output:
Latin Match: true
Greek Match: true
Mixed Match: false
[\\p{IsLatin}]+
: এই প্যাটার্নটি শুধুমাত্র ল্যাটিন অক্ষরগুলি মেলাবে। "Hello"
স্ট্রিংটি শুধুমাত্র ল্যাটিন অক্ষরের মধ্যে রয়েছে, তাই এটি ম্যাচ করবে।[\\p{IsGreek}]+
: এই প্যাটার্নটি শুধুমাত্র গ্রিক অক্ষরগুলির মধ্যে মেলাবে। "Χαίρετε"
এই গ্রিক স্ট্রিংটি সম্পূর্ণ গ্রিক অক্ষর দিয়ে গঠিত, তাই এটি ম্যাচ করবে।"Hello Χαίρετε"
স্ট্রিংটি মিশ্রিত ল্যাটিন এবং গ্রিক অক্ষরের মধ্যে রয়েছে, তাই "\\p{IsLatin}"
প্যাটার্নের সাথে মিলবে না, কারণ এটি শুধুমাত্র ল্যাটিন অক্ষর মেলানোর জন্য ডিজাইন করা।\p{IsLatin}
এবং \p{IsGreek}
ব্যবহার করে আপনি যথাক্রমে ল্যাটিন এবং গ্রিক অক্ষরের জন্য প্যাটার্ন মেলাতে পারেন।Java Regular Expressions (Regex) এর মধ্যে Unicode Blocks এবং Script Matching হলো এমন দুটি শক্তিশালী বৈশিষ্ট্য যা স্ট্রিং ম্যানিপুলেশন এবং প্যাটার্ন ম্যাচিংয়ের ক্ষেত্রে বিশেষভাবে কাজে আসে। এই দুটি বৈশিষ্ট্য Java 7 থেকে আসা Unicode Character Classes এর মাধ্যমে স্ট্রিংয়ের মধ্যে ইউনিকোড ব্লক এবং স্ক্রিপ্ট চিহ্নিত করতে সাহায্য করে।
Java রেগুলার এক্সপ্রেশনে Unicode Blocks ব্যবহার করে আপনি একটি নির্দিষ্ট ইউনিকোড ব্লকে থাকা অক্ষরগুলোকে ম্যাচ করতে পারেন। এটি Unicode Character Class হিসেবে কাজ করে, যা একটি নির্দিষ্ট ইউনিকোড ব্লকের অক্ষরের সাথে মিল খুঁজে।
\p{Is<BlockName>}
এখানে, Is<BlockName>
একটি ইউনিকোড ব্লকের নাম যা আপনি প্যাটার্নে ব্যবহার করতে পারেন। কিছু সাধারণ Unicode Block গুলি হলো:
IsBasic_Latin
: এর মধ্যে 0-127 পর্যন্ত ASCII অক্ষর।IsLatin_1_Supplement
: 128-255 পর্যন্ত অক্ষর।IsGreek
: গ্রীক ভাষার অক্ষর।IsCyrillic
: সিরিলিক ভাষার অক্ষর।IsHan
: চীনা, জাপানি, কোরিয়ান হানজির অক্ষর।import java.util.regex.*;
public class UnicodeBlockExample {
public static void main(String[] args) {
// Unicode block matching for Greek characters
String text = "Hello, this is a test with Greek characters: α, β, γ";
// Pattern to match Greek letters
Pattern pattern = Pattern.compile("\\p{IsGreek}+");
Matcher matcher = pattern.matcher(text);
// Find and print matches
while (matcher.find()) {
System.out.println("Found Greek match: " + matcher.group());
}
}
}
Output:
Found Greek match: α
Found Greek match: β
Found Greek match: γ
ব্যাখ্যা:
\p{IsGreek}+
প্যাটার্নটি Greek ইউনিকোড ব্লকের অক্ষর খুঁজে বের করতে ব্যবহৃত হয়েছে। এখানে α
, β
, এবং γ
অক্ষরগুলিকে মেলা হয়েছে, কারণ তারা Greek ব্লকের অংশ।Script Matching ইউনিকোড স্ক্রিপ্টের সাথে সম্পর্কিত অক্ষরগুলো খুঁজে বের করতে ব্যবহৃত হয়। এটি Unicode Scripts এর উপর ভিত্তি করে প্যাটার্ন ম্যাচিং করার একটি পদ্ধতি। Unicode Scripts এমন একটি নির্দিষ্ট ইউনিকোড ব্লক যেখানে একটি ভাষার অক্ষর থাকে। যেমন, ইংরেজি অক্ষর Latin স্ক্রিপ্টের অংশ, আর হিন্দি বা বাংলা অক্ষর Devanagari বা Bengali স্ক্রিপ্টের অংশ।
\p{Is<ScriptName>}
এখানে, Is<ScriptName>
নির্দেশ করে যে এটি একটি নির্দিষ্ট স্ক্রিপ্টের অক্ষরের সাথে মিলাবে। কিছু সাধারণ Unicode Scripts হলো:
IsLatin
: ল্যাটিন স্ক্রিপ্টের অক্ষর।IsCyrillic
: সিরিলিক স্ক্রিপ্টের অক্ষর।IsDevanagari
: দেবনাগরি স্ক্রিপ্টের অক্ষর।IsBengali
: বাংলা স্ক্রিপ্টের অক্ষর।import java.util.regex.*;
public class ScriptMatchingExample {
public static void main(String[] args) {
// String containing English, Hindi, and Bengali characters
String text = "Hello, नमस्ते, হ্যালো";
// Pattern to match Hindi characters (Devanagari script)
Pattern devanagariPattern = Pattern.compile("\\p{IsDevanagari}+");
Matcher devanagariMatcher = devanagariPattern.matcher(text);
// Find and print matches for Devanagari script
while (devanagariMatcher.find()) {
System.out.println("Found Hindi match: " + devanagariMatcher.group());
}
// Pattern to match Bengali characters (Bengali script)
Pattern bengaliPattern = Pattern.compile("\\p{IsBengali}+");
Matcher bengaliMatcher = bengaliPattern.matcher(text);
// Find and print matches for Bengali script
while (bengaliMatcher.find()) {
System.out.println("Found Bengali match: " + bengaliMatcher.group());
}
}
}
Output:
Found Hindi match: नमस्ते
Found Bengali match: হ্যালো
ব্যাখ্যা:
\p{IsDevanagari}+
প্যাটার্নটি Devanagari স্ক্রিপ্টের অক্ষরগুলি খুঁজে বের করতে ব্যবহৃত হয়, যেমন नमस्ते
(হিন্দি ভাষার অক্ষর)।\p{IsBengali}+
প্যাটার্নটি Bengali স্ক্রিপ্টের অক্ষরগুলি খুঁজে বের করতে ব্যবহৃত হয়, যেমন হ্যালো
(বাংলা ভাষার অক্ষর)।Unicode Blocks এবং Script Matching ব্যবহার করে আপনি বিশেষ ইউনিকোড ব্লক বা স্ক্রিপ্টের অক্ষরের সাথে স্ট্রিংয়ের প্যাটার্ন ম্যাচ করতে পারেন। এই পদ্ধতি বিভিন্ন ভাষার মধ্যে কাজ করার সময় বিশেষভাবে উপকারী, যেমন:
বিশেষ ল্যাটিন অক্ষর খুঁজে বের করা:
Pattern latinPattern = Pattern.compile("\\p{IsLatin}+");
Matcher latinMatcher = latinPattern.matcher("Hello");
while (latinMatcher.find()) {
System.out.println("Found Latin match: " + latinMatcher.group());
}
Cyrillic স্ক্রিপ্টের অক্ষর খুঁজে বের করা:
Pattern cyrillicPattern = Pattern.compile("\\p{IsCyrillic}+");
Matcher cyrillicMatcher = cyrillicPattern.matcher("Привет");
while (cyrillicMatcher.find()) {
System.out.println("Found Cyrillic match: " + cyrillicMatcher.group());
}
Unicode Normalization এবং Matching Techniques Java রেগুলার এক্সপ্রেশন (regex) এবং স্ট্রিং ম্যানিপুলেশনের জন্য গুরুত্বপূর্ণ ধারণা। এগুলি মূলত স্ট্রিংগুলোর মধ্যে বিভিন্ন ধরণের ক্যারেক্টার ম্যাচিং এবং স্ট্যান্ডার্ডাইজেশন (normalization) নিশ্চিত করার জন্য ব্যবহৃত হয়।
Unicode Normalization হল একটি প্রক্রিয়া যা Unicode স্ট্রিংয়ের মধ্যে বিভিন্ন ধরনের কনট্রাক্টেড বা ডি-কনট্রাক্টেড ক্যারেক্টারদের একক ফর্মে নিয়ে আসে, যাতে স্ট্রিংগুলো সমানভাবে হ্যান্ডেল করা যায়। Unicode একটি বিস্তৃত চরিত্র সেট, যা বিশ্বের বিভিন্ন ভাষার ক্যারেক্টার সমর্থন করে। তবে কিছু ক্যারেক্টার একাধিক উপায়ে রেকর্ড করা হতে পারে, যা সমস্যা তৈরি করতে পারে যখন স্ট্রিং তুলনা বা ম্যাচিং করা হয়।
Java-তে java.text.Normalizer
ক্লাসটি Unicode স্ট্রিংয়ের normalization করার জন্য ব্যবহৃত হয়।
import java.text.Normalizer;
public class UnicodeNormalizationExample {
public static void main(String[] args) {
// Example of Unicode normalization
String original = "\u00E1"; // 'á' as a single character
String decomposed = "\u0061\u0301"; // 'a' + combining acute accent
// Normalize to NFC (Composed Form)
String normalized = Normalizer.normalize(decomposed, Normalizer.Form.NFC);
System.out.println("Original: " + original);
System.out.println("Decomposed: " + decomposed);
System.out.println("Normalized: " + normalized);
// Check if normalized form matches
System.out.println("Matches: " + original.equals(normalized)); // true
}
}
Output:
Original: á
Decomposed: á
Normalized: á
Matches: true
ব্যাখ্যা:
Normalizer.normalize()
মেথডটি স্ট্রিংটিকে নির্দিষ্ট normalization ফর্মে রূপান্তরিত করে।á
(single character) এবং a
+ combining acute accent (decomposed form) একটি নতুন স্ট্রিংয়ে সমান হয়ে গেছে যখন normalization করা হয়েছে।Java-তে স্ট্রিংয়ের সাথে মিলানো বা রেগুলার এক্সপ্রেশন ম্যাচিং করতে বেশ কয়েকটি টেকনিক রয়েছে। এগুলি সাধারণত Pattern এবং Matcher ক্লাসের মাধ্যমে করা হয়।
Java-তে স্ট্রিংয়ের সাথে রেগুলার এক্সপ্রেশন মিলানোর জন্য প্রথমে একটি Pattern
অবজেক্ট তৈরি করতে হয়। তারপর সেই প্যাটার্নের সাথে স্ট্রিং মিলাতে Matcher
ক্লাস ব্যবহার করা হয়।
CASE_INSENSITIVE
)।import java.util.regex.*;
public class MatchingTechniquesExample {
public static void main(String[] args) {
String input = "Hello, this is a sample text for regex matching.";
// Compile the pattern
Pattern pattern = Pattern.compile("\\b[a-zA-Z]+\\b"); // Matching words
// Create matcher
Matcher matcher = pattern.matcher(input);
// Find all matches
while (matcher.find()) {
System.out.println("Found word: " + matcher.group());
}
}
}
Output:
Found word: Hello
Found word: this
Found word: is
Found word: a
Found word: sample
Found word: text
Found word: for
Found word: regex
Found word: matching
ব্যাখ্যা:
\b[a-zA-Z]+\b
: প্যাটার্নটি শুধুমাত্র শব্দের জন্য মিলবে। \b
শব্দের সীমানা চিহ্নিত করে।matcher.find()
: এটি স্ট্রিংয়ের মধ্যে প্যাটার্নের প্রথম ম্যাচ খুঁজে বের করে এবং পরবর্তী ম্যাচটি খুঁজতে find()
মেথডটি আবার কল করা হয়।import java.util.regex.*;
public class MatchingWithFlagsExample {
public static void main(String[] args) {
String text = "Hello World! hello world!";
// Compile pattern with case insensitive flag
Pattern pattern = Pattern.compile("hello", Pattern.CASE_INSENSITIVE);
// Create matcher
Matcher matcher = pattern.matcher(text);
// Find all matches
while (matcher.find()) {
System.out.println("Found: " + matcher.group());
}
}
}
Output:
Found: Hello
Found: hello
ব্যাখ্যা:
Pattern.CASE_INSENSITIVE
ফ্ল্যাগটি প্যাটার্ন ম্যাচিংকে case-insensitive করে তোলে।"Hello"
এবং "hello"
দুটি ম্যাচ হয় কারণ প্যাটার্নটি কেস ইনসেন্সিটিভ।\b
and \B
): শব্দের সীমানা চিহ্নিত করতে ব্যবহার করা হয়। \b
শব্দের শুরু বা শেষ চিহ্নিত করে, আর \B
শব্দের বাইরে চিহ্নিত করে।*
বা +
যতটা সম্ভব বেশি মিলাতে চেষ্টা করে, তবে reluctant কুয়ান্টিফায়ার যেমন *?
বা +?
কম চরিত্র মিলানোর চেষ্টা করে।Pattern
এবং Matcher
ক্লাসগুলি স্ট্রিংয়ের মধ্যে প্যাটার্ন খোঁজার এবং মেলানোর জন্য ব্যবহৃত হয়।Internationalization (i18n) হল একটি সফটওয়্যার ডেভেলপমেন্ট পদ্ধতি যা বিভিন্ন ভাষায় এবং সংস্কৃতিতে সফটওয়্যার চালানোর জন্য সেটআপ করা হয়। জাভাতে Regex (Regular Expressions) ব্যবহার করে আন্তর্জাতিককরণ বা i18n এর জন্য বিভিন্ন ধরনের টেক্সট যাচাই এবং সংস্কৃতি নির্দিষ্ট বৈশিষ্ট্য পরিচালনা করা সম্ভব। Regex ব্যবহার করে বিভিন্ন ভাষার স্ট্রিং বা তথ্যের নির্দিষ্ট প্যাটার্ন যাচাই করা যেতে পারে, যেমন ফোন নম্বর, মুদ্রা, তারিখ, ইমেইল অ্যাড্রেস ইত্যাদি, যা একাধিক ভাষায় বা সংস্কৃতিতে ব্যবহৃত হতে পারে।
Regex
জাভাতে internationalization (i18n) এর জন্য খুবই উপকারী হতে পারে যখন আপনি এমন কিছু যাচাই করতে চান যা নির্দিষ্ট দেশ বা ভাষার জন্য উপযুক্ত। উদাহরণস্বরূপ, ফোন নম্বর, তারিখ ফরম্যাট, মুদ্রার চিহ্ন, বা ভাষা নির্দিষ্ট অন্যান্য ফরম্যাট যা সংস্কৃতির ভিত্তিতে পরিবর্তিত হতে পারে।
নিচে কিছু উদাহরণ দেওয়া হলো যেখানে Regex ব্যবহার করে i18n নিশ্চিত করা যায়।
বিশ্বব্যাপী ফোন নম্বরের ফরম্যাটগুলি বিভিন্ন হতে পারে। কিছু দেশে +
চিহ্ন থাকতে পারে, কিছু দেশে কেবল ডিজিট থাকতে পারে, আবার কিছু দেশে হাইফেনের মাধ্যমে পৃথকীকরণ করা হতে পারে। এখানে একটি সাধারণ Phone Number Validation রেগুলার এক্সপ্রেশন তৈরি করা হলো।
import java.util.regex.*;
public class PhoneNumberValidation {
public static void main(String[] args) {
// Example phone numbers for various countries
String[] phoneNumbers = {
"+1-800-555-1234", // US Format
"+44 20 7946 0958", // UK Format
"+91-9876543210", // India Format
"9876543210", // India without country code
"+33 1 70 18 99 80" // France Format
};
// Regex for validating international phone numbers
String phoneRegex = "^\\+?\\d{1,4}[-\\s]?\\(?\\d{1,4}\\)?[-\\s]?\\d{1,4}[-\\s]?\\d{1,4}[-\\s]?\\d{1,4}$";
// Compile the regex pattern
Pattern pattern = Pattern.compile(phoneRegex);
// Validate each phone number
for (String phoneNumber : phoneNumbers) {
Matcher matcher = pattern.matcher(phoneNumber);
if (matcher.matches()) {
System.out.println(phoneNumber + " is a valid phone number.");
} else {
System.out.println(phoneNumber + " is not a valid phone number.");
}
}
}
}
^\\+?\\d{1,4}[-\\s]?\\(?\\d{1,4}\\)?[-\\s]?\\d{1,4}[-\\s]?\\d{1,4}[-\\s]?\\d{1,4}$
\\+?
: +
চিহ্ন হতে পারে, তবে এটি ঐচ্ছিক।\\d{1,4}
: ১ থেকে ৪ ডিজিট। এটি দেশ কোড বা ফোন নম্বরের অংশ হতে পারে।[-\\s]?
: হাইফেন বা স্পেস থাকতে পারে (ঐচ্ছিক)।\\(?\\d{1,4}\\)?
: অঞ্চল কোড, যা ঐচ্ছিকভাবে প্যারেনথেসিসের মধ্যে থাকতে পারে।[-\\s]?
: পুনরায় হাইফেন বা স্পেস থাকতে পারে।\\d{1,4}
: ফোন নম্বরের বাকি অংশ, যা ১ থেকে ৪ ডিজিট হতে পারে।+1-800-555-1234 is a valid phone number.
+44 20 7946 0958 is a valid phone number.
+91-9876543210 is a valid phone number.
9876543210 is a valid phone number.
+33 1 70 18 99 80 is a valid phone number.
তারিখের ফরম্যাট বিভিন্ন দেশে বিভিন্ন হতে পারে। উদাহরণস্বরূপ, মার্কিন যুক্তরাষ্ট্রে তারিখের ফরম্যাট হতে পারে MM/DD/YYYY
, কিন্তু ইউরোপে এটি DD/MM/YYYY
হতে পারে। এমন পরিস্থিতিতে Regex ব্যবহার করে নির্দিষ্ট ফরম্যাট যাচাই করা সম্ভব।
import java.util.regex.*;
public class DateFormatValidation {
public static void main(String[] args) {
// Example dates in MM/DD/YYYY format
String[] dates = {
"12/31/2020", // Valid
"02/29/2020", // Valid leap year
"02/30/2020", // Invalid date
"13/12/2020", // Invalid month
"01/01/2021" // Valid
};
// Regex for validating MM/DD/YYYY format
String dateRegex = "^(0[1-9]|1[0-2])/(0[1-9]|[12][0-9]|3[01])/([12][0-9]{3})$";
// Compile the regex pattern
Pattern pattern = Pattern.compile(dateRegex);
// Validate each date
for (String date : dates) {
Matcher matcher = pattern.matcher(date);
if (matcher.matches()) {
System.out.println(date + " is a valid date.");
} else {
System.out.println(date + " is not a valid date.");
}
}
}
}
^(0[1-9]|1[0-2])/(0[1-9]|[12][0-9]|3[01])/([12][0-9]{3})$
(0[1-9]|1[0-2])
: ১ থেকে ১২ পর্যন্ত মাসের সংখ্যা।(0[1-9]|[12][0-9]|3[01])
: ১ থেকে ৩১ পর্যন্ত দিন।([12][0-9]{3})
: ৪ ডিজিটের সাল (যেমন 2020, 1999)।12/31/2020 is a valid date.
02/29/2020 is a valid date.
02/30/2020 is not a valid date.
13/12/2020 is not a valid date.
01/01/2021 is a valid date.
বিশ্বব্যাপী বিভিন্ন দেশের মুদ্রা চিহ্ন এবং মানের ফরম্যাট আলাদা। উদাহরণস্বরূপ, USD এর জন্য $
, EUR এর জন্য €
, এবং INR এর জন্য ₹
চিহ্ন ব্যবহার করা হয়। আপনি Regex ব্যবহার করে এই মুদ্রা চিহ্নের বৈধতা যাচাই করতে পারেন।
import java.util.regex.*;
public class CurrencyValidation {
public static void main(String[] args) {
// Example currency amounts
String[] currencies = {
"$123.45", // USD
"€99.99", // EUR
"₹5000", // INR
"$1234.56", // USD
"£300", // Invalid currency symbol
"1000¥" // Invalid currency symbol
};
// Regex for validating currency (USD, EUR, INR)
String currencyRegex = "^[\\$€₹]\\d+(\\.\\d{1,2})?$";
// Compile the regex pattern
Pattern pattern = Pattern.compile(currencyRegex);
// Validate each currency
for (String currency : currencies) {
Matcher matcher = pattern.matcher(currency);
if (matcher.matches()) {
System.out.println(currency + " is a valid currency format.");
} else {
System.out.println(currency + " is not a valid currency format.");
}
}
}
}
^[\\$€₹]\\d+(\\.\\d{1,2})?$
^[\\$€₹]
: এটি স্ট্রিংয়ের শুরুতে $
, €
, বা ₹
এর মধ্যে একটি মুদ্রা চিহ্ন চেক করে।\\d+
: এটি একটি বা একাধিক ডিজিট চেক করে (যেমন 123, 1234)।(\\.\\d{1,2})?
: এটি ঐচ্ছিক দশমিক এবং ১ অথবা ২ ডিজিটের সেন্ট চেক করে।$123.45 is a valid currency format.
€99.99 is a valid currency format.
₹5000 is a valid currency format.
$1234.56 is a valid currency format.
£300 is not a valid currency format.
1000¥ is not a valid currency format.
Read more