एक आईपी पते को देखते हुए, कार्य इस आईपी पते को मान्य करना है और यह जांचना है कि यह आईपीवी 6 है या नहीं, रेगेक्स (रेगुलर एक्सप्रेशन) की मदद से। यदि IP पता मान्य है तो "IPv6 पता" प्रिंट करें अन्यथा "नहीं" प्रिंट करें।
एक मान्य IPv4 पता "XXXX:XXXX:XXXX:XXXX:XXXX:XXXX:XXXX:XXXX" रूप में एक IP होता है, जहां प्रत्येक Xi अंक एक हेक्साडेसिमल अंक होता है। उदाहरण के लिए,
इनपुट-1 -
IP= “3001:0da8:82a3:0:0:8B2E:0270:7224”
आउटपुट -
“Not”
स्पष्टीकरण - यह मान्य IPv6 पता नहीं है, "नहीं" लौटाएं।
इनपुट-2 -
IP= “2001:0db8:85a3:0000:0000:8a2e:0370:7334”
आउटपुट -
“IPv6”
स्पष्टीकरण - यह एक मान्य IPv6 पता है, "IPv6" लौटाएं।
इस समस्या को हल करने का तरीका
यह जांचने के लिए कि दिया गया IP पता IPv6 है या नहीं, हम ReGex का उपयोग करते हैं। एक रेगेक्स एक अभिव्यक्ति है जिसमें वर्णों का एक क्रम होता है जो एक विशिष्ट पैटर्न को परिभाषित करता है। एक स्ट्रिंग में पैटर्न से मेल खाने के लिए इन पैटर्न का उपयोग एल्गोरिदम में किया जा सकता है। यह इनपुट सत्यापन के लिए भी व्यापक रूप से उपयोग किया जाता है।
श्रेणी विशिष्टता - हम पैटर्न को सरलतम तरीके से बनाने के लिए वर्ण निर्दिष्ट कर सकते हैं। वर्णों का उपयोग करके श्रेणी निर्दिष्ट करने के लिए, हम '[ ]' कोष्ठक का उपयोग कर सकते हैं।
वर्ण निर्दिष्ट करना - उपरोक्त व्यंजक एक प्रारंभिक कोष्ठक और एक अंक को a से z , 'A' से 'Z' और '0' से '9' तक रेगेक्स के रूप में दर्शाता है।
[a-z], [A-Z] and [0-9].
दोहराए गए पैटर्न - एक अभिव्यक्ति संशोधक "+" हो सकता है जो एक या अधिक बार पैटर्न की घटना से मेल खाने का सुझाव देता है या यह "*" हो सकता है जो शून्य या अधिक बार पैटर्न की घटना से मेल खाने का सुझाव देता है।
व्यंजक [a-z]* एक रिक्त स्ट्रिंग से मेल खाएगा।
यदि आप एक या अधिक बार मिलान करने के लिए वर्णों के समूह को निर्दिष्ट करना चाहते हैं, तो आप निम्नानुसार कोष्ठक का उपयोग कर सकते हैं -
[Abc]+
इस समस्या को हल करने का तरीका निम्नलिखित है
-
IP पता निर्दिष्ट करने वाली एक स्ट्रिंग इनपुट करें।
-
एक स्ट्रिंग फ़ंक्शन वैधआईपीएड्रेस (स्ट्रिंग आईपी) इनपुट के रूप में आईपी पता लेता है और जांचता है कि इनपुट स्ट्रिंग मान्य है या नहीं। यदि यह मान्य है तो "आईपीवी 6" लौटाएं अन्यथा "आईपी पता नहीं" लौटाएं।
-
IPv6 पते के लिए एक रेगेक्स पैटर्न बनाना। चूंकि IPv6 पते में 8 फ़ील्ड होते हैं जिनमें प्रत्येक फ़ील्ड में हेक्साडेसिमल के रूप में दर्शाए गए मान अंक होते हैं। एक IPv6 पता XXXX:XXXX:XXXX:XXXX:XXXX:XXXX:XXXX:XXXX जैसा दिखता है जिसे 'कोलन' से अलग किया जाता है।
-
एक मान्य IPv6 पता सीमा में हो सकता है ([0-9a-fA-F]){1,4})\\:){7}([0-9a-fA-F]){1,4}) जिसमें पहला अंक 0-9 की सीमा में होगा, दूसरा हेक्साडेसिमल अल्फ़ान्यूमेरिक अंक है।
-
इसी तरह, दूसरे फ़ील्ड के लिए पहला वर्ण 0-9a-fA-F की सीमा में होगा, इसलिए रेगेक्स पैटर्न '[0-9a-fA-F]'
होगा।
उदाहरण
#include<bits/stdc++.h> using namespace std; string validIPAddress(string IP) { regex ipv6("((([0-9a-fA-F]){1,4})\\:){7}([0-9a-fA-F]){1,4}"); if(regex_match(IP, ipv6)) return "IPv6"; else return "Not"; } int main(){ string IP= “3001:0da8:82a3:0:0:8B2E:0270:7224”; string ans= validIPAddress(IP); cout<<ans<<endl; return 0; }
आउटपुट
उपरोक्त कोड को चलाने से आउटपुट इस प्रकार उत्पन्न होगा,
Not
चूंकि इनपुट आईपी पता एक वैध आईपी पता नहीं है, इसलिए हम "नहीं" लौटाएंगे।