সি++ এ Substitution এবং Complex Pattern Matching (জটিল প্যাটার্ন ম্যাচিং) করার জন্য std::regex লাইব্রেরি ব্যবহার করা হয়, যা C++11 এ প্রবর্তিত হয়েছে। এটি একটি শক্তিশালী টুল যা বিভিন্ন রেগুলার এক্সপ্রেশন প্যাটার্ন তৈরি, পরীক্ষা, এবং পরিচালনা করতে ব্যবহার করা যায়। এই লাইব্রেরি ব্যবহার করে পাঠ্য ডেটাতে জটিল নিয়মের ভিত্তিতে খোঁজা, প্রতিস্থাপন, বা টেক্সট ম্যানিপুলেশন সহজে করা যায়।
Substitution
Substitution হলো এমন একটি প্রক্রিয়া যেখানে একটি নির্দিষ্ট প্যাটার্ন মিলে গেলে সেটি নতুন কোনো টেক্সট দ্বারা প্রতিস্থাপিত হয়। C++ এ std::regex_replace ফাংশনটি এটি সম্পন্ন করতে ব্যবহার করা হয়।
উদাহরণ: সরল প্রতিস্থাপন
#include <iostream>
#include <regex>
#include <string>
int main() {
std::string text = "The quick brown fox jumps over the lazy dog.";
std::regex pattern("fox");
// 'fox' শব্দটি 'cat' শব্দে প্রতিস্থাপন করা
std::string result = std::regex_replace(text, pattern, "cat");
std::cout << result << std::endl; // আউটপুট: The quick brown cat jumps over the lazy dog.
return 0;
}এখানে regex_replace ফাংশন pattern ("fox") কে খুঁজে এবং "cat" দ্বারা প্রতিস্থাপন করে। এর ফলে আউটপুটে "fox" এর পরিবর্তে "cat" দেখা যায়।
উদাহরণ: গ্রুপিং এবং প্লেসহোল্ডার ব্যবহার করে প্রতিস্থাপন
std::regex_replace গ্রুপিং এবং প্লেসহোল্ডার ব্যবহার করে আরও জটিল প্রতিস্থাপন করতে পারে। উদাহরণস্বরূপ, প্রতিস্থাপনের সময় নির্দিষ্ট গ্রুপগুলো ব্যবহার করা যেতে পারে।
#include <iostream>
#include <regex>
#include <string>
int main() {
std::string text = "My email is example@test.com";
std::regex pattern(R"((\w+)(@)(\w+\.\w+))");
// ইমেইল ঠিকানার অংশ গুলো আংশিক প্রতিস্থাপন
std::string result = std::regex_replace(text, pattern, "$1[at]$3");
std::cout << result << std::endl; // আউটপুট: My email is example[at]test.com
return 0;
}এখানে, (\w+) এবং (\w+\.\w+) দিয়ে ইমেইলের অংশগুলো ক্যাপচার করা হয়েছে, এবং $1 এবং $3 ব্যবহার করে আউটপুটে আংশিকভাবে প্রতিস্থাপন করা হয়েছে।
Complex Pattern Matching
Complex Pattern Matching করার জন্য std::regex_search এবং std::regex_match ব্যবহার করা হয়। এটি টেক্সট থেকে নির্দিষ্ট নিয়ম অনুযায়ী প্যাটার্ন খুঁজতে সাহায্য করে। regex_match পুরো স্ট্রিং মিললে সত্য রিটার্ন করে, আর regex_search স্ট্রিংয়ের ভেতরে প্যাটার্ন মিল খুঁজে পেলে সত্য রিটার্ন করে।
উদাহরণ: সরল প্যাটার্ন ম্যাচিং
#include <iostream>
#include <regex>
#include <string>
int main() {
std::string text = "My phone number is 123-456-7890";
std::regex pattern(R"(\d{3}-\d{3}-\d{4})");
if (std::regex_search(text, pattern)) {
std::cout << "Phone number found!" << std::endl;
} else {
std::cout << "Phone number not found." << std::endl;
}
return 0;
}উপরের উদাহরণে, \d{3}-\d{3}-\d{4} প্যাটার্নটি একটি ফোন নম্বর মেলে (যেমন "123-456-7890") এবং regex_search ফাংশন এই প্যাটার্নের উপর ভিত্তি করে ম্যাচ খুঁজে পায়।
উদাহরণ: Complex Pattern Matching with Groups
গ্রুপিং এবং অগ্রগতি শর্ত ব্যবহার করে আরও জটিল প্যাটার্ন তৈরি করা যায়।
#include <iostream>
#include <regex>
#include <string>
int main() {
std::string text = "Product code: ABC-1234";
std::regex pattern(R"((\w+)-(\d+))");
std::smatch match;
if (std::regex_search(text, match, pattern)) {
std::cout << "Full match: " << match.str(0) << std::endl;
std::cout << "Part 1: " << match.str(1) << std::endl; // ABC
std::cout << "Part 2: " << match.str(2) << std::endl; // 1234
}
return 0;
}এখানে (\w+)-(\d+) প্যাটার্নটি "ABC-1234" এর মতো প্রোডাক্ট কোড মেলে, এবং smatch অবজেক্টের মাধ্যমে আলাদা করে গ্রুপগুলোর মান বের করা হয়েছে।
সংক্ষেপে
- Substitution (প্রতিস্থাপন):
std::regex_replaceব্যবহার করে নির্দিষ্ট প্যাটার্ন খুঁজে নতুন মান দিয়ে প্রতিস্থাপন করা যায়। গ্রুপিং এবং প্লেসহোল্ডার ব্যবহার করে আরও জটিল সাবস্টিটিউশন করা সম্ভব। - Complex Pattern Matching (জটিল প্যাটার্ন ম্যাচিং):
std::regex_searchএবংstd::regex_matchব্যবহার করে টেক্সটে জটিল নিয়ম অনুযায়ী প্যাটার্ন খুঁজে বের করা যায়। গ্রুপিং ব্যবহার করে নির্দিষ্ট অংশগুলো আলাদা করে পাওয়া যায়।
সি++ এ std::regex লাইব্রেরি ব্যবহার করে সহজে ও কার্যকরভাবে জটিল প্যাটার্ন ম্যাচিং এবং সাবস্টিটিউশন করা যায়, যা ডেটা প্রসেসিং ও টেক্সট ম্যানিপুলেশনের জন্য অত্যন্ত উপযোগী।
Read more