C++ में रेगुलर एक्सप्रेशन उदाहरणों के साथ: बुनियादी से अभ्यास तक
\n\nरेगुलर एक्सप्रेशन (regex) पैटर्न के अनुसार टेक्स्ट के टुकड़ों को खोजने, निकालने और बदलने के लिए एक शक्तिशाली उपकरण है। C++ में, रेगुलर एक्सप्रेशन के लिए समर्थन C++11 मानक में दिखाई दिया और <regex> लाइब्रेरी में लागू किया गया है। इस लेख में, हम std::regex के व्यावहारिक उदाहरणों पर चर्चा करेंगे जो आपको अपनी परियोजनाओं में स्ट्रिंग को कुशलतापूर्वक संसाधित करने में मदद करेंगे।
1. std::regex की मूल बातें: निर्माण और सरल खोज
\n\nC++ में रेगुलर एक्सप्रेशन के साथ काम करने के लिए तीन मुख्य वर्गों का उपयोग किया जाता है: std::regex (पैटर्न), std::smatch (स्ट्रिंग के लिए परिणाम) और std::sregex_iterator (एकाधिक मिलान के लिए इटरेटर)।
उदाहरण 1: पैटर्न के साथ स्ट्रिंग के मिलान की जाँच
\n#include <iostream>\n#include <regex>\n#include <string>\n\nint main() {\n std::string email = "user@example.com";\n // ईमेल जाँच के लिए पैटर्न (सरलीकृत)\n std::regex pattern(R"([a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,})");\n \n if (std::regex_match(email, pattern)) {\n std::cout << "ईमेल सही है!" << std::endl;\n } else {\n std::cout << "ईमेल प्रारूप से मेल नहीं खाता।" << std::endl;\n }\n return 0;\n}\n\nफ़ंक्शन std::regex_match जाँचता है कि पूरी स्ट्रिंग पूरी तरह से पैटर्न से मेल खाती है या नहीं। R"(...)" के उपयोग पर ध्यान दें - यह एक raw string literal है, जो बैकस्लैश को एस्केप करने की आवश्यकता को समाप्त करता है।
उदाहरण 2: सबस्ट्रिंग खोजना
\n#include <iostream>\n#include <regex>\n#include <string>\n\nint main() {\n std::string text = "मेरा नंबर: +7 (123) 456-78-90। मुझे कॉल करें!";\n std::regex phone_pattern(R"(\\+7\\s?\\(\\d{3}\\)\\s?\\d{3}-\\d{2}-\\d{2})");\n std::smatch match;\n \n if (std::regex_search(text, match, phone_pattern)) {\n std::cout << "नंबर मिला: " << match.str() << std::endl;\n std::cout << "स्थिति: " << match.position() << std::endl;\n } else {\n std::cout << "नंबर नहीं मिला।" << std::endl;\n }\n return 0;\n}\n\nstd::regex_search स्ट्रिंग में पैटर्न का पहला मिलान ढूंढता है। परिणाम std::smatch ऑब्जेक्ट में संग्रहीत किया जाता है, जिससे मिली हुई सबस्ट्रिंग और उसकी स्थिति निकाली जा सकती है।
2. कैप्चरिंग ग्रुप्स की मदद से डेटा निकालना
\n\nग्रुप्स मिलान के अलग-अलग हिस्सों को निकालने की अनुमति देते हैं। उन्हें गोल कोष्ठक () से दर्शाया जाता है।
उदाहरण 3: तिथि पार्स करना
\n#include <iostream>\n#include <regex>\n#include <string>\n\nint main() {\n std::string date = "आज 15.04.2025";\n std::regex date_pattern(R"((\\d{2})\\.(\\d{2})\\.(\\d{4}))");\n std::smatch match;\n \n if (std::regex_search(date, match, date_pattern)) {\n std::cout << "पूर्ण तिथि: " << match[0] << std::endl;\n std::cout << "दिन: " << match[1] << std::endl;\n std::cout << "महीना: " << match[2] << std::endl;\n std::cout << "वर्ष: " << match[3] << std::endl;\n }\n return 0;\n}\n\nउदाहरण 4: इटरेटर का उपयोग करके सभी मिलान निकालना
\n#include <iostream>\n#include <regex>\n#include <string>\n\nint main() {\n std::string log = "ERROR: फ़ाइल नहीं मिली\\nWARNING: बैटरी कम है\\nINFO: ऑपरेशन पूर्ण हुआ\\nERROR: कनेक्शन टाइमआउट";\n std::regex error_pattern(R"(^ERROR:\\s*(.+)$)");\n \n // सभी पंक्तियों को पार करने के लिए std::sregex_iterator का उपयोग करें\n auto words_begin = std::sregex_iterator(log.begin(), log.end(), error_pattern);\n auto words_end = std::sregex_iterator();\n \n std::cout << "मिले