C++ में नियमित अभिव्यक्तियाँ उदाहरण सहित: शुरुआती लोगों के लिए पूर्ण गाइड
\n\nनियमित अभिव्यक्तियाँ (regex) टेक्स्ट को पैटर्न के आधार पर खोजने, जाँचने और बदलने का एक शक्तिशाली उपकरण हैं। C++ में, नियमित अभिव्यक्तियों के साथ काम <regex> लाइब्रेरी के माध्यम से कार्यान्वित किया जाता है, जो C++11 मानक में शामिल हुई थी। इस लेख में, हम व्यावहारिक उदाहरणों के साथ C++ में regex के साथ काम करने की मूल बातें समझेंगे, जो शुरुआती लोगों के लिए भी समझने योग्य हैं।
नियमित अभिव्यक्तियाँ क्या हैं और इनकी आवश्यकता क्यों है?
\n\nनियमित अभिव्यक्ति वर्णों का एक क्रम है जो टेक्स्ट में खोजने के लिए एक पैटर्न निर्दिष्ट करता है। उदाहरण के लिए, पैटर्न \\d{3}-\\d{2}-\\d{2} SNILS नंबर के प्रारूप का वर्णन करता है: तीन अंक, डैश, दो अंक, डैश, दो अंक।
C++ में नियमित अभिव्यक्तियाँ निम्नलिखित मुख्य कार्यों को हल करती हैं:
\n\n- \n
- इनपुट की सत्यता की जाँच (ईमेल, फ़ोन, दिनांक) \n
- टेक्स्ट से डेटा निकालना \n
- सबस्ट्रिंग की खोज और प्रतिस्थापन \n
- जटिल विभाजकों द्वारा स्ट्रिंग को विभाजित करना \n
<regex> लाइब्रेरी तीन मुख्य एल्गोरिदम प्रदान करती है:
- \n
std::regex_match— पैटर्न के साथ स्ट्रिंग का पूर्ण मिलान \n std::regex_search— स्ट्रिंग में मिलान खोजना \n std::regex_replace— पैटर्न के आधार पर मिलान को बदलना \n
C++ में नियमित अभिव्यक्तियों का मूल सिंटैक्स
\n\nकोड लिखने से पहले, आइए regex सिंटैक्स के मुख्य तत्वों को समझें जो उदाहरणों में काम आएंगे:
\n\n| प्रतीक | अर्थ | उदाहरण |
|---|---|---|
. | कोई भी वर्ण (नई पंक्ति को छोड़कर) | c.t — cat, cot, cut |
\\d | अंक (0-9) | \\d\\d — 23, 45, 99 |
\\w | अक्षर, अंक या अंडरस्कोर | \\w+ — शब्द |
\\s | रिक्त स्थान वर्ण | \\s+ — एक या अधिक रिक्त स्थान |
* | 0 या अधिक पुनरावृत्तियाँ | ab*c — ac, abc, abbc |
+ | 1 या अधिक पुनरावृत्तियाँ | ab+c — abc, abbc (ac नहीं) |
? | 0 या 1 पुनरावृत्ति | colou?r — color, colour |
{n} | ठीक n पुनरावृत्तियाँ | \\d{3} — 123, 456 |
[abc] | सेट से कोई भी वर्ण | [aeiou] — स्वर |
() | कैप्चर के लिए समूह | (\\d{2})-(\\d{2}) |
उदाहरण 1: regex_match के साथ ईमेल पता जाँचना
\n\nसरल से शुरू करते हैं — जाँचें कि क्या स्ट्रिंग ईमेल प्रारूप से मेल खाती है। हम std::regex_match का उपयोग करते हैं, जिसके लिए पूर्ण मिलान आवश्यक है।
#include <iostream>\n#include <regex>\n#include <string>\n\nint main() {\n std::string email = "user@example.com";\n // ईमेल के लिए सरल पैटर्न:\n // [\\w.]+ — एक या अधिक वर्ण (अक्षर, अंक, बिंदु, अंडरस्कोर)\n // @ — 'एट' प्रतीक\n // [\\w.]+ — डोमेन नाम\n // \\.[a-z]{2,} — बिंदु और शीर्ष-स्तरीय डोमेन (कम से कम 2 अक्षर)\n std::regex pattern(R"([\\w.]+@[\\w.]+\\.\\w{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 email = "user@com";\n if (std::regex_match(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ध्यान दें