C++ में रेगुलर एक्सप्रेशन: स्ट्रिंग्स के साथ काम करने के लिए एक शक्तिशाली उपकरण
रेगुलर एक्सप्रेशन (regex) पैटर्न के आधार पर टेक्स्ट में सबस्ट्रिंग्स को खोजने और हेरफेर करने के लिए एक औपचारिक भाषा है। C++ में, रेगुलर एक्सप्रेशन के लिए समर्थन C++11 मानक में दिखाई दिया और <regex> लाइब्रेरी में लागू किया गया है। यह डेटा वैलिडेशन, लॉग पार्सिंग, पैटर्न खोज और टेक्स्ट रिप्लेसमेंट के लिए एक अपरिहार्य उपकरण है।
इस लेख में, हम regex लाइब्रेरी के मुख्य फंक्शन्स को समझेंगे, पैटर्न बनाना सीखेंगे और कोड के साथ व्यावहारिक उदाहरण देखेंगे।
1. <regex> लाइब्रेरी के मुख्य प्रकार और फंक्शन्स
C++ में रेगुलर एक्सप्रेशन के साथ काम करने के लिए तीन मुख्य क्लासेस का उपयोग किया जाता है:
std::regex— स्वयं रेगुलर एक्सप्रेशन (पैटर्न) को दर्शाता है।std::smatch— खोज परिणामों को संग्रहीत करने के लिए कंटेनर (std::stringप्रकार की स्ट्रिंग्स के लिए)।std::cmatch— C-स्ट्रिंग्स (const char*) के लिए एनालॉग।
regex लागू करने के लिए मुख्य फंक्शन्स:
std::regex_match()— जाँचता है कि पूरी स्ट्रिंग पैटर्न से मेल खाती है या नहीं।std::regex_search()— स्ट्रिंग में पैटर्न का पहला मिलान ढूंढता है।std::regex_replace()— सभी मिलानों को निर्दिष्ट टेक्स्ट से बदल देता है।
#include <iostream>#include <regex>#include <string>
int main() { std::string text = "मेरा नंबर: +7-123-456-78-90"; std::regex pattern(R"(\\+7-\\d{3}-\\d{3}-\\d{2}-\\d{2})");
if (std::regex_search(text, pattern)) { std::cout << "नंबर मिल गया!" << std::endl; }
// मिलान निकालें std::smatch match; if (std::regex_search(text, match, pattern)) { std::cout << "मिला हुआ नंबर: " << match[0] << std::endl; }
return 0;}2. रेगुलर एक्सप्रेशन का सिंटैक्स: मेटाकैरेक्टर और क्वांटिफायर
C++ में regex पैटर्न ECMAScript (डिफ़ॉल्ट रूप से) के समान सिंटैक्स का उपयोग करते हैं। यहाँ मुख्य तत्व हैं:
- डॉट (.) — न्यूलाइन को छोड़कर कोई भी एकल कैरेक्टर।
- स्टार (*) — पिछले कैरेक्टर की 0 या अधिक पुनरावृत्तियाँ।
- प्लस (+) — 1 या अधिक पुनरावृत्तियाँ।
- प्रश्न चिह्न (?) — 0 या 1 पुनरावृत्ति (कैरेक्टर को वैकल्पिक बनाता है)।
- वर्गाकार कोष्ठक ([]) — कैरेक्टर क्लास (उदाहरण के लिए,
[0-9]— कोई भी अंक)। - गोल कोष्ठक (()) — ग्रुपिंग और सबस्ट्रिंग कैप्चर करना।
- वर्टिकल बार (|) — लॉजिकल OR।
- प्रतीक ^ — स्ट्रिंग की शुरुआत।
- प्रतीक $ — स्ट्रिंग का अंत।
क्वांटिफायर के उदाहरण:
\\d{3}— बिल्कुल 3 अंक।\\w{2,4}— 2 से 4 अल्फ़ान्यूमेरिक कैरेक्टर।[A-Za-z]+— एक या अधिक लैटिन अक्षर।
#include <iostream>#include <regex>#include <string>
int main() { std::string email = "user@example.com"; // email के लिए सरल पैटर्न std::regex email_pattern(R"([\\w.+-]+@[\\w-]+\\.[\\w.]+)");
if (std::regex_match(email, email_pattern)) { std::cout << "Email सही है." << std::endl; } else { std::cout << "Email गलत है." << std::endl; }
// फ़ोन नंबर की जाँच std::string phone = "+7 (495) 123-45-67"; std::regex phone_pattern(R"(\\+7\\s?\\(?\\d{3}\\)?\\s?\\d{3}-?\\d{2}-?\\d{2})");
if (std::regex_match(phone, phone_pattern)) { std::cout << "फ़ोन सही है." << std::endl; }
return 0;}3. कैप्चर ग्रुप्स का उपयोग करके डेटा निकालना
कैप्चर ग्रुप्स