Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C++

ตรวจสอบที่อยู่ IPv6 โดยใช้รูปแบบ ReGex ใน C++


เมื่อได้รับที่อยู่ IP ภารกิจคือการตรวจสอบที่อยู่ IP นี้และตรวจสอบว่าเป็น IPv6 หรือไม่ด้วยความช่วยเหลือของ ReGex (นิพจน์ทั่วไป) หากที่อยู่ IP ถูกต้อง ให้พิมพ์ "ที่อยู่ IPv6" ไม่เช่นนั้นให้พิมพ์ "ไม่ใช่"

ที่อยู่ IPv4 ที่ถูกต้องคือ IP ในรูปแบบ "XXXX:XXXX:XXXX:XXXX:XXXX:XXXX:XXXX:XXXX" โดยที่แต่ละหลัก 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]+

ต่อไปนี้คือแนวทางในการแก้ปัญหานี้

  • รับอินพุตสตริงที่ระบุที่อยู่ IP

  • ฟังก์ชันสตริง validIPAddress(string IP) รับที่อยู่ IP เป็นอินพุตและตรวจสอบว่าสตริงอินพุตถูกต้องหรือไม่ หากถูกต้อง ให้ส่งคืน “IPv6” มิฉะนั้น ให้ส่งคืน “Not an IP Address”

  • การสร้างรูปแบบ regex สำหรับที่อยู่ 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 ดังนั้นรูปแบบ regex จะเป็น '[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

เนื่องจากที่อยู่ IP ที่ป้อนไม่ใช่ที่อยู่ IP ที่ถูกต้อง เราจะส่งคืน "ไม่"