C++ में रेगुलर एक्सप्रेशन: उदाहरणों के साथ पूर्ण गाइड

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

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

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

C++ में रेगुलर एक्सप्रेशन: टेक्स्ट के साथ काम करने के लिए शक्तिशाली उपकरण



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



लाइब्रेरी <regex> के मुख्य घटक



लाइब्रेरी <regex> में कई प्रमुख क्लास और फ़ंक्शन शामिल हैं:



  • std::regex — एक क्लास जो संकलित रेगुलर एक्सप्रेशन का प्रतिनिधित्व करता है।
  • std::smatch — खोज परिणामों को संग्रहीत करने के लिए कंटेनर (std::string प्रकार के स्ट्रिंग के लिए)।
  • std::regex_match — जाँचता है कि पूरा स्ट्रिंग पैटर्न से मेल खाता है या नहीं।
  • std::regex_search — स्ट्रिंग में पैटर्न की पहली घटना खोजता है।
  • std::regex_replace — मिलानों को निर्दिष्ट टेक्स्ट से बदलता है।


आइए उदाहरणों के साथ इनमें से प्रत्येक घटक पर विचार करें।



उदाहरण 1: पैटर्न के साथ स्ट्रिंग के मिलान की जाँच (regex_match)



फ़ंक्शन std::regex_match true लौटाता है यदि पूरा स्ट्रिंग पूरी तरह से रेगुलर एक्सप्रेशन से मेल खाता है। यह डेटा सत्यापन के लिए आदर्श है, उदाहरण के लिए, ईमेल या फ़ोन नंबर की जाँच करना।



#include <iostream>#include <regex>#include <string>

int main() { std::string email = "user@example.com"; // ईमेल जाँच के लिए पैटर्न (सरलीकृत) std::regex pattern(R"([a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,})"); if (std::regex_match(email, pattern)) { std::cout << "ईमेल सही है।" << std::endl; } else { std::cout << "ईमेल गलत है।" << std::endl; } // गलत ईमेल के साथ उदाहरण std::string bad_email = "user@.com"; if (std::regex_match(bad_email, pattern)) { std::cout << "ईमेल सही है।" << std::endl; } else { std::cout << "ईमेल गलत है।" << std::endl; } return 0;}


इस उदाहरण में, हमने बैकस्लैश को एस्केप करने से बचने के लिए रॉ स्ट्रिंग R"(...)" का उपयोग किया। पैटर्न जाँचता है कि स्ट्रिंग में स्थानीय भाग, @ चिह्न, डोमेन नाम और शीर्ष-स्तरीय डोमेन है।



उदाहरण 2: टेक्स्ट में सबस्ट्रिंग खोजना (regex_search)



यदि आपको स्ट्रिंग के अंदर पैटर्न की पहली घटना खोजने की आवश्यकता है, तो std::regex_search का उपयोग किया जाता है। परिणाम std::smatch ऑब्जेक्ट में संग्रहीत होते हैं।



#include <iostream>#include <regex>#include <string>

int main() { std::string text = "मेरा फ़ोन नंबर: +7 (123) 456-78-90। कृपया मुझे कॉल करें!"; // रूसी फ़ोन नंबर खोजने के लिए पैटर्न std::regex phone_pattern(R"(\\+7\\s?\\(?\\d{3}\\)?\\s?\\d{3}[- ]?\\d{2}[- ]?\\d{2})"); std::smatch match; if (std::regex_search(text, match, phone_pattern)) { std::cout << "नंबर मिला: " << match.str() << std::endl; std::cout << "स्थिति: " << match.position() << std::endl; } else { std::cout << "नंबर नहीं मिला।" << std::endl; } return 0;}


match ऑब्जेक्ट में न केवल मिला हुआ स्ट्रिंग होता है, बल्कि घटना की स्थिति के बारे में जानकारी भी होती है। विधि match.str() मिले हुए खंड को लौटाती है, और match.position() मूल स्ट्रिंग में मिलान की शुरुआत का इंडेक्स लौटाती है।



उदाहरण 3: regex_replace के साथ टेक्स्ट बदलना



फ़ंक्शन std::regex_replace पैटर्न की सभी घटनाओं को निर्दिष्ट स्ट्रिंग से बदल देता है। बैकरेफरेंस का उपयोग किया जा सकता है (backrefer

ब्लॉग

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