C++ में रेगुलर एक्सप्रेशन: उदाहरण सहित व्यावहारिक गाइड

शुरुआती लोगों के लिए ऑनलाइन Python प्रशिक्षक

Python आसानी से सीखें बिना सिद्धांत के बोझ के। स्वचालित जांच के साथ व्यावहारिक कार्य हल करें और ब्राउज़र में सीधे कोड लिखें।

पाठ्यक्रम शुरू करें

C++ में रेगुलर एक्सप्रेशन: उदाहरण सहित व्यावहारिक गाइड

\n\n

रेगुलर एक्सप्रेशन (regex) टेक्स्ट प्रोसेसिंग का एक शक्तिशाली टूल है, जो जटिल पैटर्न के आधार पर स्ट्रिंग्स को खोजने, बदलने और वैलिडेट करने में मदद करता है। C++ में रेगुलर एक्सप्रेशन का सपोर्ट C++11 स्टैंडर्ड से <regex> लाइब्रेरी के ज़रिए आया। इस आर्टिकल में हम std::regex का प्रैक्टिकल उपयोग सीखेंगे: सिंपल चेक से लेकर डेटा एक्सट्रैक्शन और टेक्स्ट रिप्लेसमेंट तक।

\n\n

यह सामग्री C++ के नए सीखने वालों और अनुभवी डेवलपर्स दोनों के लिए उपयोगी है। हम मुख्य फंक्शन्स std::regex_match, std::regex_search और std::regex_replace के साथ-साथ कैप्चर ग्रुप्स के साथ काम करना भी कवर करेंगे।

\n\n

<regex> लाइब्रेरी के मुख्य कम्पोनेंट्स

\n\n

उदाहरणों पर जाने से पहले, मुख्य क्लासेस और फंक्शन्स को समझ लेते हैं:

\n\n
    \n
  • std::regex — यह क्लास रेगुलर एक्सप्रेशन (पैटर्न) को रिप्रेजेंट करती है। इसे एक स्ट्रिंग पैटर्न और ऑप्शनल ग्रामर फ्लैग (डिफ़ॉल्ट ECMAScript) के साथ बनाया जाता है।
  • \n
  • std::smatch — सर्च रिजल्ट्स को स्टोर करने का कंटेनर (std::string टाइप के लिए)। C-स्ट्रिंग्स के लिए std::cmatch का उपयोग होता है।
  • \n
  • std::regex_match — यह चेक करता है कि पूरी स्ट्रिंग पैटर्न से मेल खाती है या नहीं।
  • \n
  • std::regex_search — यह स्ट्रिंग में कहीं भी पैटर्न से मेल खाने वाली सबस्ट्रिंग ढूंढता है।
  • \n
  • std::regex_replace — यह पैटर्न से मेल खाने वाली सभी जगहों को निर्दिष्ट स्ट्रिंग से बदल देता है (बैकरेफरेंस सपोर्ट के साथ)।
  • \n
\n\n

सभी फंक्शन्स बिहेवियर कंट्रोल करने के लिए फ्लैग्स लेते हैं (जैसे, केस-इनसेंसिटिव सर्च के लिए std::regex_constants::icase)।

\n\n

उदाहरण 1: स्ट्रिंग को पैटर्न से मैच करना (std::regex_match)

\n\n

सबसे आसान काम है यह जांचना कि स्ट्रिंग किसी खास फॉर्मेट में है या नहीं। उदाहरण के लिए, जांचते हैं कि स्ट्रिंग एक वैलिड ईमेल एड्रेस है या नहीं (सरलीकृत वर्जन):

\n\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\n    // गलत ईमेल की जांच\n    std::string bad_email = "user@.com";\n    if (std::regex_match(bad_email, pattern)) {\n        std::cout << "ईमेल सही है।" << std::endl;\n    } else {\n        std::cout << "ईमेल गलत है।" << std::endl;\n    }\n\n    return 0;\n}
\n\n

आउटपुट:

\n
ईमेल सही है।\nईमेल गलत है।
\n\n

व्याख्या:

\n
    \n
  • हमने रॉ स्ट्रिंग लिटरल R"(...)" का उपयोग किया है ताकि बैकस्लैश को एस्केप न करना पड़े।
  • \n
  • फंक्शन std::regex_match केवल तभी true लौटाता है जब पूरी स्ट्रिंग पैटर्न से पूरी तरह मेल खाए।
  • \n
  • पैटर्न [a-zA-Z0-9._%+-]+ का मतलब है "दिए गए सेट में से एक या अधिक कैरेक्टर"।
  • \n
\n\n

उदाहरण 2: सबस्ट्रिंग ढूंढना और डेटा निकालना (std::regex_search)

\n\n

अक्सर सिर्फ जांचना नहीं, बल्कि पैटर्न के सभी मिलान ढूंढना और स्ट्रिंग के कुछ हिस्से निकालना ज़रूरी होता है। इसके लिए std::regex_search का उपयोग लूप में किया जाता है। नीचे दिए गए उदाहरण में हम टेक्स्ट से +7-XXX-XXX-XX-XX फॉर्मेट के सभी फोन नंबर ढूंढेंगे और ऑपरेटर कोड निकालेंगे:

\n\n
#include <iostream>\n#include <regex>\n#include <string>\n\nint main() {\n    std::string text = "संपर्क: +7-495-123-45-67 और +7-916-987-65-43। अतिरिक्त नंबर: +7-495-111-22-33।";\n    // पैटर्न: +7-कोड(3 अंक)-... (कोड और बाकी के लिए कैप्चर ग्रुप)\n    std::rege                

ब्लॉग

पुस्तक अनुशंसाएँ