เมื่อได้รับที่อยู่ IP ภารกิจคือการตรวจสอบที่อยู่ IP นี้และตรวจสอบว่าเป็น IPv4 หรือไม่ด้วยความช่วยเหลือของ ReGex (นิพจน์ทั่วไป) หากที่อยู่ IP ถูกต้อง ให้พิมพ์ "ที่อยู่ IPv4" ไม่เช่นนั้นให้พิมพ์ "ไม่ใช่"
ที่อยู่ IPv4 ที่ถูกต้องคือ IP ในรูปแบบ "X1.X2.X3.X4" โดยที่ 0 <=Xi <=255 และ Xi ไม่สามารถมีศูนย์นำหน้าได้ ตัวอย่างเช่น "192.168.1.1" และ "192.168.1.0" เป็นที่อยู่ IPv4 ที่ถูกต้อง แต่ "192.168.01.1" ในขณะที่ "192.168.1.00" และ "[email protected]" เป็นที่อยู่ IPv4 ที่ไม่ถูกต้อง ตัวอย่างเช่น
อินพุต-1 −
IP= “172.15.254.2”
ผลผลิต −
“IPv4”
คำอธิบาย − นี่คือที่อยู่ IPv4 ที่ถูกต้อง ส่งคืน “IPv4”
อินพุต-2 −
IP= “312.25.12.1”
ผลผลิต −
“Not”
คำอธิบาย − นี่ไม่ใช่ที่อยู่ IPv4 ที่ถูกต้อง ให้ส่งคืน "No"
แนวทางการแก้ปัญหานี้
เพื่อตรวจสอบว่าที่อยู่ IP ที่กำหนดเป็น IPv4 หรือไม่ เราใช้ ReGex ReGex คือนิพจน์ที่มีลำดับของอักขระที่กำหนดรูปแบบเฉพาะ รูปแบบเหล่านี้สามารถใช้ในอัลกอริทึมเพื่อให้ตรงกับรูปแบบในสตริง นอกจากนี้ยังใช้กันอย่างแพร่หลายสำหรับการตรวจสอบอินพุตด้วย
ข้อกำหนดช่วง − เราสามารถระบุตัวอักษรเพื่อสร้างรูปแบบในวิธีที่ง่ายที่สุด ในการระบุช่วงโดยใช้อักขระ เราสามารถใช้วงเล็บ '[ ]'
การระบุตัวละคร − นิพจน์ด้านบนระบุวงเล็บเปิดและตัวเลขในช่วง a ถึง z , 'A' ถึง 'Z' และ '0' ถึง '9' เป็นนิพจน์ทั่วไป [a-z], [A-Z] และ [0-9].
รูปแบบซ้ำ − ตัวแก้ไขนิพจน์อาจเป็น "+" ที่แนะนำให้จับคู่การเกิดขึ้นของรูปแบบอย่างน้อยหนึ่งครั้ง หรืออาจเป็น "*" ที่แนะนำให้จับคู่การเกิดขึ้นของรูปแบบเป็นศูนย์หรือมากกว่าครั้ง
นิพจน์ [a-z]* จะจับคู่กับสตริงว่าง
หากคุณต้องการระบุกลุ่มอักขระให้ตรงกันหนึ่งครั้งหรือมากกว่านั้น คุณสามารถใช้วงเล็บดังต่อไปนี้ −
[Abc]+
ต่อไปนี้เป็นแนวทางในการแก้ปัญหานี้
-
รับอินพุตสตริงที่ระบุที่อยู่ IP
-
ฟังก์ชันสตริง validIPAddress(string IP) รับที่อยู่ IP เป็นอินพุตและตรวจสอบว่าสตริงอินพุตถูกต้องหรือไม่ หากถูกต้อง ให้ส่งคืน “IPv4” มิฉะนั้น ให้ส่งคืน “Not an IP Address”
-
การสร้างรูปแบบ regex สำหรับที่อยู่ IPv4 เนื่องจากที่อยู่ IPv4 มี 4 ช่อง โดยแต่ละช่องมีค่าอยู่ในช่วง 0-255 ที่อยู่ IPv4 ดูเหมือน XXX.XXX.XXX.XXX
-
ที่อยู่ IPv4 ที่ถูกต้องอาจอยู่ในช่วง (([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9 ]|25[0- 5])\\.){3} โดยหลักแรกจะอยู่ในช่วง 0-9, 1-9 ตัวที่สอง และหลักที่สามในช่วง 0-9
-
ในทำนองเดียวกัน สำหรับฟิลด์ที่สอง อักขระตัวแรกจะอยู่ในช่วง 100-199 ดังนั้นรูปแบบ regex จะเป็น '1[0-9]-0-9]'
-
สำหรับช่องถัดไป ตัวเลขจะอยู่ในช่วง 200-249 ดังนั้นรูปแบบ regex จะเป็น '2[0-4][0-9]' ซึ่งทำให้มั่นใจได้ว่าช่วงจะไม่เกินตัวเลขที่มากกว่า 255
-
สุดท้ายซึ่งเป็นฟิลด์ถัดไปมีตัวเลขในช่วง 250-255 ดังนั้นรูปแบบ regex จะเป็น 25[0-5]
ตัวอย่าง
#include<bits/stdc++.h> using namespace std; string validIPAddress(string IP) { regex ipv4("(([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\\.){3}([0- 9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])"); if(regex_match(IP, ipv4)) return "IPv4"; else return "Not"; } int main(){ string IP= “172.16.254.1”; string ans= validIPAddress(IP); cout<<ans<<endl; return 0; }
ผลลัพธ์
การเรียกใช้โค้ดด้านบนจะสร้างผลลัพธ์เป็น
IPv4
เนื่องจากที่อยู่ IP ที่ป้อนเป็นที่อยู่ IP ที่ถูกต้อง เราจะส่งคืน “IPv4”