Java Regular Expressions (Regex) ব্যবহারে প্যাটার্ন matching আরও কাস্টমাইজ করতে flags ব্যবহার করা যেতে পারে। Java এর Pattern ক্লাসে কিছু বিশেষ flags রয়েছে, যেগুলি প্যাটার্ন matching-এর আচরণ পরিবর্তন করতে সাহায্য করে, যেমন CASE_INSENSITIVE, DOTALL, এবং MULTILINE। এই flags-গুলো regex প্যাটার্নের matching behavior কাস্টমাইজ করতে ব্যবহৃত হয়।
Flags:
CASE_INSENSITIVE(Pattern.CASE_INSENSITIVE):- এই flag ব্যবহার করলে, regex প্যাটার্নটি case-insensitive হয়ে যায়, অর্থাৎ বড় হাতের (uppercase) এবং ছোট হাতের (lowercase) অক্ষরের মধ্যে পার্থক্য করা হয় না।
- এটি প্যাটার্ন matching-এর সময় case (বড় বা ছোট অক্ষর) উপেক্ষা করে।
DOTALL(Pattern.DOTALL):DOTALLflag ব্যবহার করলে,.(dot) symbol যেকোনো character (যেমন new line) কে মেলাবে। সাধারনত,.শুধুমাত্র সাধারণ characters যেমন alphabets, digits ইত্যাদি মেলে, কিন্তুDOTALLflag দিলে এটি newline character (\n) সহ সব ধরনের ক্যারেক্টার মেলে।
MULTILINE(Pattern.MULTILINE):MULTILINEflag ব্যবহার করলে,^এবং$anchors স্ট্রিংয়ের প্রতিটি নতুন লাইনের শুরু এবং শেষের সাথে মিলে। সাধারনত,^এবং$স্ট্রিংয়ের শুরু এবং শেষের সাথে মেলে, কিন্তুMULTILINEflag ব্যবহার করলে তা lines এর মধ্যে এবং শেষে মেলে।
Java Regex Example Using Flags (CASE_INSENSITIVE, DOTALL, MULTILINE):
এখানে আমরা একটি practical example দেখব যেখানে তিনটি flag ব্যবহার করা হবে—CASE_INSENSITIVE, DOTALL, এবং MULTILINE।
Step 1: Using CASE_INSENSITIVE, DOTALL, and MULTILINE Flags with Pattern Matching
import java.util.regex.*;
public class RegexFlagsExample {
public static void main(String[] args) {
// Example text for testing
String text = "Hello World!\nThis is a multiline text.\nThe quick brown fox jumps over the lazy dog.";
// Case insensitive regex pattern
String caseInsensitivePattern = "hello";
// Dotall regex pattern (dot will match newline characters)
String dotAllPattern = "fox.*dog";
// Multiline regex pattern
String multilinePattern = "^The";
// Compile patterns with respective flags
Pattern patternCaseInsensitive = Pattern.compile(caseInsensitivePattern, Pattern.CASE_INSENSITIVE);
Pattern patternDotAll = Pattern.compile(dotAllPattern, Pattern.DOTALL);
Pattern patternMultiline = Pattern.compile(multilinePattern, Pattern.MULTILINE);
// Create matchers
Matcher matcherCaseInsensitive = patternCaseInsensitive.matcher(text);
Matcher matcherDotAll = patternDotAll.matcher(text);
Matcher matcherMultiline = patternMultiline.matcher(text);
// Case insensitive match
System.out.println("Case Insensitive Match: " + matcherCaseInsensitive.find());
// Dotall match (will match across newlines)
System.out.println("Dotall Match (fox.*dog): " + matcherDotAll.find());
// Multiline match (will match lines starting with "The")
System.out.println("Multiline Match (^The): " + matcherMultiline.find());
}
}
ব্যাখ্যা:
- Case Insensitive Matching:
Pattern.CASE_INSENSITIVEflag ব্যবহার করে আমরাhelloপ্যাটার্নটি বড় হাতের বা ছোট হাতেরhelloএর সাথে মেলাতে পারি।
- Dotall Matching:
Pattern.DOTALLflag ব্যবহার করে আমরাfox.*dogপ্যাটার্নটি লাইনবিরতির (newline) মধ্যে মেলে এমন কোনো কিছু খুঁজতে পারি। অর্থাৎ, এটিfoxথেকেdogপর্যন্ত যেকোনো কিছু মেলাবে, এমনকি যদি তারা আলাদা লাইনে থাকে।
- Multiline Matching:
Pattern.MULTILINEflag ব্যবহার করলে,^Theপ্যাটার্নটি শুধুমাত্র স্ট্রিংয়ের শুরুতে নয়, বরং প্রতিটি নতুন লাইনের শুরুতে খুঁজবে।
Step 2: Output
Case Insensitive Match: true
Dotall Match (fox.*dog): true
Multiline Match (^The): true
আউটপুট ব্যাখ্যা:
- Case Insensitive Match:
helloস্ট্রিংটিHello(বড় হাতের H) এবংhello(ছোট হাতের h) এর সাথে মিলে গেছে, কারণCASE_INSENSITIVEflag ব্যবহৃত হয়েছে। - Dotall Match:
fox.*dogপ্যাটার্নটি নতুন লাইনসহ পুরো টেক্সটের মধ্যে মেলেছে, কারণDOTALLflag ব্যবহৃত হয়েছে। - Multiline Match:
^Theপ্যাটার্নটি টেক্সটের প্রতিটি নতুন লাইনের শুরুতে মিলেছে, কারণMULTILINEflag ব্যবহৃত হয়েছে।
Other Possible Flags in Java Regex:
UNICODE_CASE(Pattern.UNICODE_CASE):- Unicode ক্যারেক্টার matching করতে ব্যবহৃত হয়, যা আন্তর্জাতিক ক্যারেক্টার সেটের সঙ্গে কাজ করতে সহায়ক।
COMMENTS(Pattern.COMMENTS):- এই flag regex প্যাটার্নে মন্তব্য (comments) যোগ করতে সাহায্য করে, যাতে regex এর মধ্যে আরও পরিষ্কার এবং পাঠযোগ্য করা যায়।
LITERAL(Pattern.LITERAL):- এটি regex প্যাটার্নকে একটি সাধারণ literal string হিসেবে ব্যবহার করতে সাহায্য করে, যেখানে কোনও metacharacter ব্যবহার করা হয় না।
Java Regex এর flags ব্যবহার করে আপনি প্যাটার্ন matching-এর আচরণ কাস্টমাইজ করতে পারেন। CASE_INSENSITIVE, DOTALL, এবং MULTILINE হল কিছু গুরুত্বপূর্ণ flag যা Java Regex ব্যবহারকারীদের প্যাটার্ন matching এর মধ্যে অনেক flexibility দেয়। এগুলি স্ট্রিং matching এবং টেক্সট ম্যানিপুলেশনকে আরও শক্তিশালী ও কার্যকর করে তোলে, বিশেষত যখন আপনাকে বিভিন্ন ধরনের প্যাটার্ন মেলাতে বা টেক্সট ফর্ম্যাটিং করতে হয়।
Read more