কম্পিউটার

C++ এ ReGex প্যাটার্ন ব্যবহার করে IPv6 ঠিকানা যাচাই করুন


একটি আইপি ঠিকানা দেওয়া, কাজটি হল এই আইপি ঠিকানাটি যাচাই করা এবং এটি আইপিভি 6 কিনা তা ReGex(রেগুলার এক্সপ্রেশন) এর সাহায্যে পরীক্ষা করা। যদি IP ঠিকানাটি বৈধ হয় তাহলে "IPv6 ঠিকানা" প্রিন্ট করুন অন্যথায় "Not" প্রিন্ট করুন।

একটি বৈধ 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 ব্যবহার করি। একটি ReGex হল একটি অভিব্যক্তি যাতে অক্ষরের একটি ক্রম থাকে যা একটি নির্দিষ্ট প্যাটার্নকে সংজ্ঞায়িত করে। এই প্যাটার্নগুলিকে একটি স্ট্রিং এর প্যাটার্নের সাথে মেলাতে অ্যালগরিদমে ব্যবহার করা যেতে পারে। এটি ইনপুট বৈধকরণের জন্যও ব্যাপকভাবে ব্যবহৃত হয়৷

রেঞ্জ স্পেসিফিকেশন − আমরা সহজ উপায়ে নিদর্শনগুলি তৈরি করতে অক্ষরগুলি নির্দিষ্ট করতে পারি। অক্ষর ব্যবহার করে পরিসীমা নির্দিষ্ট করতে, আমরা ‘[ ]’ বন্ধনী ব্যবহার করতে পারি।

অক্ষর নির্দিষ্ট করা − উপরের অভিব্যক্তিটি একটি খোলা বন্ধনী এবং রেজেক্স হিসাবে a থেকে z, 'A' থেকে 'Z' এবং '0' থেকে '9' পরিসরের একটি সংখ্যা নির্দেশ করে৷

[a-z], [A-Z] and [0-9].

পুনরাবৃত্ত প্যাটার্ন − একটি এক্সপ্রেশন মডিফায়ার হতে পারে "+" যা একটি প্যাটার্নের ঘটনার সাথে এক বা একাধিকবার মিল করার পরামর্শ দেয় বা এটি "*" হতে পারে যা একটি প্যাটার্ন শূন্য বা তার বেশি বার হওয়ার সাথে মিল করার পরামর্শ দেয়৷

অভিব্যক্তি [a-z]* একটি ফাঁকা স্ট্রিংয়ের সাথে মিলবে।

আপনি যদি এক বা একাধিকবার মেলে অক্ষরের একটি গ্রুপ নির্দিষ্ট করতে চান, তাহলে আপনি নিম্নোক্তভাবে বন্ধনী ব্যবহার করতে পারেন -

[Abc]+

নিম্নলিখিত এই সমস্যা সমাধানের পদ্ধতি

  • একটি আইপি ঠিকানা উল্লেখ করে একটি স্ট্রিং ইনপুট নিন।

  • একটি স্ট্রিং ফাংশন বৈধআইপিএড্রেস(স্ট্রিং আইপি) আইপি ঠিকানাকে ইনপুট হিসাবে নেয় এবং ইনপুট স্ট্রিংটি বৈধ কিনা তা পরীক্ষা করে। যদি এটি বৈধ হয় তবে "IPv6" ফেরত দিন অন্যথায় "আইপি ঠিকানা নয়" ফেরত দিন।

  • IPv6 ঠিকানার জন্য একটি regex প্যাটার্ন তৈরি করা। যেহেতু একটি IPv6 ঠিকানায় 8টি ক্ষেত্র রয়েছে যেখানে প্রতিটি ক্ষেত্রে হেক্সাডেসিমেল হিসাবে উপস্থাপিত মান সংখ্যা রয়েছে। একটি IPv6 ঠিকানা দেখতে XXXX:XXX: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

যেহেতু ইনপুট আইপি ঠিকানা একটি বৈধ আইপি ঠিকানা নয়, আমরা "না" ফেরত দেব।


  1. C++ এ অ্যান্ড্রয়েড আনলক প্যাটার্ন

  2. কিভাবে C/C++ ব্যবহার করে স্থানীয় কম্পিউটারের IP ঠিকানা পেতে হয়?

  3. C# এ আইপি ঠিকানা যাচাই করুন

  4. Python Regex ব্যবহার করে একটি প্রদত্ত স্ট্রিং-এ “1(0+)1”-এর সমস্ত প্যাটার্ন খুঁজুন