Computer >> 컴퓨터 >  >> 프로그램 작성 >> C++

C++에서 Regex 패턴을 사용하여 IPv4 주소 확인

<시간/>

IP 주소가 주어지면 이 IP 주소를 검증하고 ReGex(Regular Expression)를 사용하여 IPv4인지 여부를 확인하는 작업입니다. IP 주소가 유효한 경우 "IPv4 주소"를 인쇄하고 그렇지 않으면 "Not"을 인쇄하십시오.

유효한 IPv4 주소는 "X1.X2.X3.X4" 형식의 IP입니다. 여기서 0 <=Xi <=255이고 Xi는 선행 0을 포함할 수 없습니다. 예를 들어 "192.168.1.1" 및 "192.168.1.0"은 유효한 IPv4 주소이지만 "192.168.01.1", "192.168.1.00" 및 "192.168@1.1"은 잘못된 IPv4 주소입니다. 예를 들어,

입력-1 -

IP= “172.15.254.2”

출력 -

“IPv4”

설명 − 유효한 IPv4 주소입니다. "IPv4"를 반환합니다.

입력-2 -

IP= “312.25.12.1”

출력 -

“Not”

설명 − 유효한 IPv4 주소가 아닙니다. "아니오"를 반환하십시오.

이 문제를 해결하기 위한 접근 방식

주어진 IP 주소가 IPv4인지 확인하기 위해 ReGex를 사용합니다. ReGex는 특정 패턴을 정의하는 일련의 문자를 포함하는 표현식입니다. 이러한 패턴은 알고리즘에서 문자열의 패턴을 일치시키는 데 사용할 수 있습니다. 입력 유효성 검사에도 널리 사용됩니다.

범위 지정 − 가장 간단한 방법으로 패턴을 만들기 위해 문자를 지정할 수 있습니다. 문자를 사용하여 범위를 지정하려면 '[ ]' 대괄호를 사용할 수 있습니다.

문자 지정 - 위의 표현은 여는 괄호와 a ~ z, 'A' ~ 'Z', '0' ~ '9' 범위의 숫자를 정규식으로 나타냅니다. [a-z], [A-Z] 및 [0-9].

반복된 패턴 − 표현식 수정자는 패턴의 발생을 한 번 이상 일치하도록 제안하는 "+"일 수 있거나 패턴의 발생을 0번 이상 일치하도록 제안하는 "*"일 수 있습니다.

[a-z]* 표현식은 빈 문자열과 일치합니다.

한 번 이상 일치하도록 문자 그룹을 지정하려면 다음과 같이 괄호를 사용할 수 있습니다. -

[Abc]+

다음은 이 문제를 해결하기 위한 접근 방식입니다.

  • IP 주소를 지정하는 문자열을 입력하십시오.

  • 문자열 함수 validIPAddress(string IP)는 IP 주소를 입력으로 받아 입력 문자열이 유효한지 여부를 확인합니다. 유효한 경우 "IPv4"를 반환하고 그렇지 않으면 "IP 주소가 아님"을 반환합니다.

  • IPv4 주소에 대한 정규식 패턴 만들기. IPv4 주소에는 각 필드에 0-255 범위의 값이 포함된 4개의 필드가 포함되어 있기 때문입니다. 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 범위에 있으므로 정규식 패턴은 '1[0-9]-0-9]'가 됩니다.

  • 다음 필드의 경우 숫자는 200-249 범위에 있습니다. 따라서 정규식 패턴은 '2[0-4][0-9]'가 되어 범위가 255보다 큰 숫자를 초과하지 않도록 합니다.

  • 다음 필드인 마지막 필드는 250-255 범위의 숫자를 포함하므로 정규식 패턴은 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"를 반환합니다.