মাল্টি-লাইন ইনপুটে রেগেক্স ম্যাচিং
যদি ইনপুট টেক্সটে একাধিক লাইন থাকে এবং প্রতিটি লাইনে আলাদা আলাদা রেগেক্স ম্যাচ করতে হয়, তবে নিচের পদ্ধতিটি অনুসরণ করুন:
ধাপাবধি পদ্ধতি
- ইনপুট স্ট্রিং নিন।
split("\r?\n")দিয়ে লাইনগুলো আলাদা করুন (Windows: \r\n, Unix: \n)।- রেগেক্স প্যাটার্ন কম্পাইল করুন।
- ম্যাচার অবজেক্ট তৈরি করুন।
- লুপ দিয়ে প্রতিটি লাইনে
find()করুন। - প্রতিটি লাইনের জন্য
matcher.reset(strArray[i])কল করুন।
কোড উদাহরণ: প্রতিটি লাইনে ডিজিট খুঁজে বের করা
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class MultiLineMatching {
public static void main(String[] args) {
// মাল্টি-লাইন ইনপুট
String input = "sample text line 1 \n line2 353 35 63 \n line 3 53 35";
String regex = "\\d"; // ডিজিট ম্যাচ
// লাইন-wise সплиট
String[] strArray = input.split("\r?\n");
Pattern pattern = Pattern.compile(regex);
Matcher matcher = pattern.matcher(input); // ইনিশিয়াল ইনপুট
for (int i = 0; i < strArray.length; i++) {
// প্রতিটি লাইনের জন্য ম্যাচার রিসেট
matcher.reset(strArray[i]);
System.out.println("Line:: " + (i+1));
while (matcher.find()) {
System.out.print(matcher.group() + " ");
}
System.out.println();
}
}
}
আউটপুট
Line:: 1 1
Line:: 2 2 3 5 3 3 5 6 3
Line:: 3 3 5 3 3 5
ব্যাখ্যা
- লাইন ১: "sample text line 1" -> শুধু '1' পাওয়া গেল।
- লাইন ২: "line2 353 35 63" -> 2, 3, 5, 3, 3, 5, 6, 3 = ৮টি ডিজিট।
- লাইন ৩: "line 3 53 35" -> 3, 5, 3, 3, 5 = ৫টি ডিজিট।
বিকল্প: MULTILINE মোড (Pattern.MULTILINE)
যদি আপনি `^` এবং `$` অ্যাঙ্কর ব্যবহার করে লাইন শুরু/শেষ ম্যাচ করতে চান, তবে Pattern.compile(regex, Pattern.MULTILINE) ব্যবহার করুন। তবে উপরের পদ্ধতিটি আরও ফ্লেক্সিবল এবং প্রতিটি লাইন আলাদা প্রসেস করতে দেয়।
সারসংক্ষেপ
মাল্টি-লাইন টেক্সটে রেগেক্স ম্যাচ করার সবচেয়ে নিশ্চিত পদ্ধতি হলো লাইন অনুযায়ী সплиট করে প্রতিটি লাইন আলাদা প্রসেস করা। split("\r?\n") ক্রস-প্ল্যাটফর্ম কম্প্যাটিবল, এবং matcher.reset() দিয়ে প্রতিটি লাইনে নতুন matcher তৈরি করতে হয় না — একই matcher রিয়ूজ করা যায়।