c regex tutorial regular expressions c with examples
C ++ रेग्युलर एक्सप्रेशंस या रेगेक्स पर ट्यूटोरियल C ++ में रीगेक्स का कार्य करता है, जिसमें रेगेक्स मैच की कार्यक्षमता, खोज, प्रतिस्थापित, इनपुट सत्यापन और टोकन शामिल हैं:
नियमित रूप से अभिव्यक्ति या regexes या regexp के रूप में वे आमतौर पर कहा जाता है स्ट्रिंग या पाठ के एक विशेष पैटर्न का प्रतिनिधित्व करने के लिए उपयोग किया जाता है। Regexes का उपयोग अक्सर एक स्ट्रिंग के एक मानक पाठ वाक्यविन्यास को दर्शाने के लिए किया जाता है।
=> C ++ प्रशिक्षण श्रृंखला को सभी के लिए देखने के लिए यहां जाएं।
एक नियमित अभिव्यक्ति में प्रत्येक वर्ण या तो एक शाब्दिक अर्थ वाला एक चरित्र होता है या एक 'मेटाचैकर' जिसका विशेष अर्थ होता है।
उदाहरण के लिए , एक नियमित अभिव्यक्ति '[a-z]' में मान, आ ’, expression अब’, ’कुल्हाड़ी’ आदि हो सकते हैं। यहां इसका शाब्दिक अर्थ है और [a-z] एक से z तक किसी भी निचले वर्ण को दर्शाता है।
बेशक, उपरोक्त उदाहरण सबसे सरल है। हमारे पास मिलान करने के लिए अधिक जटिल पैटर्न के साथ एक नियमित अभिव्यक्ति हो सकती है।
लगभग सभी प्रोग्रामिंग भाषा रीगेक्स के लिए समर्थन प्रदान करती हैं। C ++ को C ++ 11 के बाद से रीगेक्स के लिए प्रत्यक्ष समर्थन प्राप्त है। प्रोग्रामिंग लैंग्वेज के अलावा, लेक्सर्स, एडवांस टेक्स्ट एडिटर्स आदि जैसे टेक्स्ट प्रोसेसिंग प्रोग्राम्स में से अधिकांश रीक्सेक्स का इस्तेमाल करते हैं।
इस ट्यूटोरियल में, हम C ++ प्रोग्रामिंग के संबंध में सामान्य रूप से रीगेक्स के विवरण का पता लगाएंगे।
आप क्या सीखेंगे:
- नियमित अभिव्यक्ति (regex) C ++ में
- C ++ regex में उपयोग किए जाने वाले फ़ंक्शन टेम्पलेट
- सी ++ इनपुट वैलिडेशन
- निष्कर्ष
नियमित अभिव्यक्ति (regex) C ++ में
एक रेगुलर एक्सप्रेशन या रेगेक्स एक ऐसा एक्सप्रेशन है जिसमें वर्णों का एक क्रम होता है जो एक विशेष खोज पैटर्न को परिभाषित करता है जिसका उपयोग स्ट्रिंग सर्चिंग एल्गोरिदम में किया जा सकता है, एल्गोरिदम को ढूंढ या बदल सकता है, आदि। Regexes का उपयोग इनपुट सत्यापन के लिए भी किया जाता है।
अधिकांश प्रोग्रामिंग भाषाएं या तो रेगेक्स के लिए या पुस्तकालयों के माध्यम से अंतर्निहित क्षमता प्रदान करती हैं। C ++ 11 के बाद, C ++ हेडर के माध्यम से मानक पुस्तकालय के माध्यम से रेगेक्स समर्थन प्रदान करता है।
एक रेगेक्स प्रोसेसर जो रेगेक्स को पार्स करने के लिए उपयोग किया जाता है, इसे एक आंतरिक प्रतिनिधित्व में अनुवाद करता है जिसे निष्पादित किया जाता है और एक स्ट्रिंग के खिलाफ मिलान किया जाता है जो पाठ की खोज का प्रतिनिधित्व करता है। C ++ 11 ECMAScript व्याकरण को regex के लिए डिफ़ॉल्ट व्याकरण के रूप में उपयोग करता है। ECMAScript सरल है, फिर भी यह शक्तिशाली रेगेक्स क्षमताएं प्रदान करता है।
आइए हम कुछ प्रतिमानों को देखें जिन्हें हम रेगेक्स में निर्दिष्ट करते हैं जैसे कि रेंज स्पेसिफिकेशन, रिपीटेड पैटर्न आदि।
रेंज विनिर्देशों
वर्णों या शाब्दिकों की एक श्रृंखला को निर्दिष्ट करना एक रेगेक्स में प्रयुक्त सबसे सरल मानदंडों में से एक है।
उदाहरण के लिए, हम निम्न से z से निचले अक्षरों की एक श्रृंखला निर्दिष्ट कर सकते हैं:
[ए-जेड]
यह बिल्कुल एक लोअरकेस चरित्र से मेल खाएगा।
निम्नलिखित मानदंड,
[A-Za-z0-9]
उपरोक्त अभिव्यक्ति एक एकल अपरकेस चरित्र, एक लोअरकेस वर्ण और 0 से 9 तक के अंक वाली सीमा को निर्दिष्ट करती है।
उपरोक्त अभिव्यक्तियों में कोष्ठक ([]) का एक विशेष अर्थ है, अर्थात् उनका उपयोग सीमा को निर्दिष्ट करने के लिए किया जाता है। यदि आप एक अभिव्यक्ति के हिस्से के रूप में एक ब्रैकेट शामिल करना चाहते हैं, तो आपको इसे भागने की आवश्यकता होगी।
तो निम्नलिखित अभिव्यक्ति,
[ [0-9]
उपरोक्त अभिव्यक्ति एक खुलने वाली कोष्ठक और 0 से 9 की सीमा में एक अंक के रूप में इंगित करता है।
लेकिन ध्यान दें कि जैसा कि हम C ++ में प्रोग्रामिंग कर रहे हैं, हमें निम्न के रूप में C ++ विशिष्ट एस्केप सीक्वेंस का उपयोग करने की आवश्यकता है:
[\ [0-9]
बार-बार पैटर्न
सीमा उदाहरण है कि हम ऊपर निर्दिष्ट किया है केवल एक चरित्र या शाब्दिक मैच। यदि हम एक से अधिक वर्णों का मिलान करना चाहते हैं, तो हम आम तौर पर पैटर्न के साथ 'अभिव्यक्ति संशोधक' निर्दिष्ट करते हैं, जिससे यह दोहराया पैटर्न होता है।
एक अभिव्यक्ति संशोधक '+' हो सकता है जो एक या अधिक बार पैटर्न की घटना से मेल खाने का सुझाव देता है या यह '*' हो सकता है जो पैटर्न शून्य या अधिक समय की घटना से मेल खाता है।
उदाहरण के लिए,निम्नलिखित अभिव्यक्ति,
[a-z] + स्ट्रिंग्स जैसे a, aaa, abcd, softwaretestinghelp आदि से मेल खाता है। ध्यान दें कि यह कभी भी रिक्त स्ट्रिंग से मेल नहीं खाएगा।
इजहार,
[a-z] * एक रिक्त स्ट्रिंग या उपरोक्त स्ट्रिंग्स में से किसी से मेल खाएगा।
यदि आप एक या अधिक बार मिलान करने के लिए वर्णों का एक समूह निर्दिष्ट करना चाहते हैं, तो आप कोष्ठक का उपयोग निम्नानुसार कर सकते हैं:
(Xyz) +
उपरोक्त अभिव्यक्ति Xyz, XyzXyz, और XyzXyzXyz, आदि से मेल खाएगी।
C ++ रेगेक्स उदाहरण
एक नियमित अभिव्यक्ति पर विचार करें जो एक MS-DOS फ़ाइल नाम से मेल खाता है जैसा कि नीचे दिखाया गया है।
char regex_filename[] = “[a-zA-Z_] [a-zA-Z_0-9]*\.[a-zA-Z0-9]+”;
उपरोक्त रेगेक्स की व्याख्या इस प्रकार की जा सकती है:
एक पत्र (लोअरकेस और फिर अपरकेस) या एक अंडरस्कोर मैच। फिर शून्य या अधिक वर्णों का मिलान करें, जिसमें प्रत्येक अक्षर, या अंडरस्कोर या एक अंक हो सकता है। फिर एक शाब्दिक बिंदु (?) से मिलान करें। डॉट के बाद, एक या एक से अधिक वर्णों का मिलान करें, जिसमें प्रत्येक एक अक्षर या अंक हो सकता है जो फ़ाइल एक्सटेंशन को दर्शाता है।
C ++ regex में उपयोग किए जाने वाले फ़ंक्शन टेम्पलेट
आइए C ++ में रेगेक्स की प्रोग्रामिंग करते समय कुछ महत्वपूर्ण फ़ंक्शन टेम्प्लेटों पर चर्चा करें।
regex_match ()
इस फंक्शन टेम्पलेट का उपयोग दिए गए पैटर्न से मेल खाने के लिए किया जाता है। यह फ़ंक्शन सही है यदि दी गई अभिव्यक्ति स्ट्रिंग से मेल खाती है। अन्यथा, फ़ंक्शन गलत देता है।
निम्नलिखित C ++ प्रोग्रामिंग उदाहरण है जो regex_match फ़ंक्शन को प्रदर्शित करता है।
#include #include #include using namespace std; int main () { if (regex_match ('softwareTesting', regex('(soft)(.*)') )) cout आउटपुट:
उपरोक्त कार्यक्रम में, सबसे पहले, हम स्ट्रिंग 'सॉफ्टवेयरटाइटिंग' को रेग्युलर एक्सप्रेशन '(' (सॉफ्ट) (? *) 'से मैच करते हैं। रेगेक्स_मैच फंक्शन का उपयोग करते हैं। इसके बाद, हम इसे एक स्ट्रिंग ऑब्जेक्ट को पास करने के लिए regex_match के विभिन्न रूपों को भी प्रदर्शित करते हैं। सीमा, आदि।
regex_search ()
फ़ंक्शन regex_search () का उपयोग स्ट्रिंग में एक पैटर्न खोजने के लिए किया जाता है जो नियमित अभिव्यक्ति से मेल खाता है।
निम्नलिखित C ++ प्रोग्राम पर विचार करें जो regex_search () का उपयोग दिखाता है।
#include #include #include using namespace std; int main() { //string to be searched string mystr = 'She sells_sea shells in the sea shore'; // regex expression for pattern to be searched regex regexp('s[a-z_]+'); // flag type for determining the matching behavior (in this case on string objects) smatch m; // regex_search that searches pattern regexp in the string mystr regex_search(mystr, m, regexp); cout<<'String that matches the pattern:'< आउटपुट:
हम एक स्ट्रिंग और फिर रेगेक्स ऑब्जेक्ट का उपयोग करके एक नियमित अभिव्यक्ति निर्दिष्ट करते हैं। इस स्ट्रिंग और रेगेक्स को स्मैग फ्लैग प्रकार के साथ regex_search फ़ंक्शन में पास किया जाता है। फ़ंक्शन इनपुट स्ट्रिंग में पैटर्न की पहली घटना के लिए खोज करता है और मिलान स्ट्रिंग लौटाता है।
regex_replace ()
फ़ंक्शन regex_replace () का उपयोग स्ट्रिंग से नियमित अभिव्यक्ति से मेल खाने वाले पैटर्न को बदलने के लिए किया जाता है।
Regex_replace () फ़ंक्शन को प्रदर्शित करने के लिए C ++ प्रोग्राम का उपयोग करें।
#include #include #include #include using namespace std; int main() { string mystr = 'This is software testing Help portal
'; cout<<'Input string: '< आउटपुट:
यहां, हमारे पास एक इनपुट स्ट्रिंग है। हम 'पी' से शुरू होने वाले स्ट्रिंग से मिलान करने के लिए एक नियमित अभिव्यक्ति प्रदान करते हैं। फिर हम मिलान शब्द को ed वेबसाइट ’शब्द से बदल देते हैं। इसके बाद, हम ’वेबसाइट’ शब्द को पोर्टल पर वापस लाते हैं।
सी ++ इनपुट वैलिडेशन
हमने प्रमुख फ़ंक्शन टेम्प्लेट्स पर चर्चा की है जो रेगेक्स का उपयोग करके पैटर्न मिलान के लिए उपयोग किए जाते हैं। यह उल्लेखनीय है कि रेगेक्स का मुख्य उद्देश्य इनपुट सत्यापन है। आप रेगेक्स एक्सप्रेशन का उपयोग करते हुए एक मानक इनपुट डिवाइस से दर्ज इनपुट को मान्य कर सकते हैं।
आने वाले डेटा को मान्य करने के लिए आप regex का उपयोग कैसे कर सकते हैं यह दिखाने के लिए नीचे दिए गए कार्यक्रम की जाँच करें।
#include #include #include using namespace std; int main() { string input; regex integer_expr('(\+|-)?[[:digit:]]+'); //As long as the input is correct ask for another number while(true) { cout<>input; if(!cin) break; //Exit when the user inputs q if(input=='q') break; if(regex_match(input,integer_expr)) cout<<'Input is an integer'< आउटपुट:
यह प्रोग्राम उपयोगकर्ता द्वारा दर्ज किए गए इनपुट से मेल खाता है यदि यह पूर्णांक है तो मान्य है। उपरोक्त आउटपुट से पता चलता है कि जब एक पूर्णांक दर्ज किया जाता है, तो यह एक उपयुक्त संदेश देता है और जब कोई अन्य डेटा दर्ज किया जाता है तो यह संदेश को अमान्य इनपुट के रूप में देता है।
कैसे प्रभावी परीक्षण के मामले लिखने के लिए
निष्कर्ष
रेगेक्स का उपयोग सर्च इंजन में सर्च प्रोसेसर, वर्ड प्रोसेसर और टेक्स्ट एडिटर जैसे अनुप्रयोगों के संवादों को खोजने और बदलने के लिए किया जाता है। Regex का उपयोग UNIX उपयोगिताओं जैसे कि sed, awk के साथ-साथ कार्यक्रम के शाब्दिक विश्लेषण में भी किया जाता है।
हमने उन कार्यों को देखा है जिनका उपयोग इस ट्यूटोरियल में प्रतिमानों को खोजने, बदलने और बदलने के लिए किया जाता है। इन कार्यों का उपयोग करते हुए, हम मूल रूप से एक कुशल एप्लिकेशन विकसित कर सकते हैं जो रेगेक्स का उपयोग करके वांछित कार्यक्षमता को लागू करता है।
रेगेक्स इनपुट या खोज को कुशलतापूर्वक सत्यापित करने और पैचिंग पैटर्न द्वारा एक स्ट्रिंग को बदलने की अनुमति देता है और यह C ++ कोड की बहुत कम लाइनों का उपयोग करके किया जा सकता है।
यह भी पढ़े => जावा नियमित अभिव्यक्ति ट्यूटोरियल
=> यहां सभी C ++ ट्यूटोरियल की जांच करें।
अनुशंसित पाठ
- उदाहरण के साथ MongoDB नियमित अभिव्यक्ति $ regex
- उदाहरणों के साथ अजगर डेटाइम ट्यूटोरियल
- यूनिक्स रेगुलर एक्सप्रेशंस का उपयोग कैसे करें
- जावा सरणी कोड कोड के साथ लंबाई ट्यूटोरियल
- उदाहरणों के साथ यूनिक्स शैल स्क्रिप्टिंग ट्यूटोरियल
- उदाहरण के साथ MongoDB शेयरिंग ट्यूटोरियल
- सेलेनियम उदाहरणों के साथ पाठ ट्यूटोरियल द्वारा तत्व का पता लगाएं
- यूनिक्स पाइप्स ट्यूटोरियल: यूनिक्स प्रोग्रामिंग में पाइप्स