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"을 반환합니다.