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

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

<시간/>

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

유효한 IPv4 주소는 "XXXX:XXXX:XXXX:XXXX:XXXX:XXXX:XXXX:XXXX" 형식의 IP이며, 여기서 각 Xi 숫자는 16진수입니다. 예를 들어,

입력-1 -

IP= “3001:0da8:82a3:0:0:8B2E:0270:7224”

출력 -

“Not”

설명 − 유효한 IPv6 주소가 아닙니다. "Not"을 반환합니다.

입력-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].

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

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

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

[Abc]+

다음은 이 문제를 해결하는 방법입니다.

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

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

  • IPv6 주소에 대한 정규식 패턴 만들기. IPv6 주소에는 각 필드에 16진수로 표시된 값 숫자가 포함된 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 범위에 있고 두 번째 숫자는 16진수 영숫자입니다.

  • 마찬가지로 두 번째 필드의 경우 첫 번째 문자는 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

입력한 IP 주소가 유효한 IP 주소가 아니므로 "Not"을 반환합니다.