IPv6 주소를 Perl Regex와 일치시킬 수있는 방법은 무엇입니까?

StackOverflow https://stackoverflow.com/questions/1802722

  •  05-07-2019
  •  | 
  •  

문제

따라서 마스크가 있거나 없을 수도있는 IPv6 주소와 일치해야합니다. 불행히도 나는 라이브러리를 사용하여 문자열을 구문 분석 할 수 없습니다.

이 경우 마스크 비트는 충분히 쉽습니다.

(?:\/\d{1,3})?$/

어려운 부분은 IPv6 주소의 다른 형식입니다. 일치해야합니다 :: 쇠고기, 쇠고기 ::, 쇠고기 :: 쇠고기 등

업데이트 : 거의 거기에 ..

/^(\:\:([a-f0-9]{1,4}\:){0,6}?[a-f0-9]{0,4}|[a-f0-9]{1,4}(\:[a-f0-9]{1,4}){0,6}?\:\:|[a-f0-9]{1,4}(\:[a-f0-9]{1,4}){1,6}?\:\:([a-f0-9]{1,4}\:){1,6}?[a-f0-9]{1,4})(\/\d{1,3})?$/i

나는이 경우 Perl 's Regex를 사용하는 것으로 제한되어 있습니다.

도움이 되었습니까?

해결책

이것 Regexp :: Common to Regexp에 패치가 포함되어 있습니다. IPv6 문법의 직선 번역. Regexp :: IPv6 또한 정확합니다.

더 중요한 것은 테스트 스위트가 포함되어 있다는 것입니다. Regex 쇼로 실행하면 여전히 길을 벗어납니다. 19 명 중 10 명은 놓쳤다. 12 개의 허위 긍정 중 1 개. IPv6에는 많은 특수 속도가 포함되어있어 미묘하게 잘못되기 쉽습니다.

IPv6 주소로 들어가는 것에 대해 읽을 수있는 가장 좋은 곳은 다음과 같습니다. RFC 3986 섹션 3.2.2.

다른 팁

도서관 만 사용할 수 없다는 것은 무엇을 의미합니까? 모듈은 어떻습니까? Regexp::IPv6 필요한 것을 줄 것입니다.

저는 IPv6 전문가가 아니지만 IPv6 주소가 일치하는 (유효성을 확인하는 것만으로도)를 말할 때 저를 믿으십시오. 주소를 포트와 결합하기위한 많은 속기와 다양한 규칙이 있습니다. 그러한 속기 중 하나는 0 : 0 : 0 : 0 : 0 : 0 : 0 : 1 AS :: 1을 쓸 수 있다는 것입니다. 독일어를 읽으면 슬라이드를 보는 것이 좋습니다. Steffen Ullrich의 대화 제 11 회 독일 Perl 워크숍에서.

당신은 당신이 도서관을 사용할 수 없다고 말하지만, 당신이 도서관의 전체 복잡성을 재창조 할 것이라면, 당신은 그것을 프로젝트에 구두로 가져올 수 있습니다.

이것은 대부분 작동합니다 ...

^([0-9a-fA-F]{0,4}|0)(\:([0-9a-fA-F]{0,4}|0)){7}$

단점 : :: 제대로 처리되지 않은 경우처럼

이 시도:

^([0-9a-fA-F]{4}|0)(\:([0-9a-fA-F]{4}|0)){7}$

에서 정규 표현 라이브러리 : IPv6 주소

당신은 또한 이것을 읽어야합니다 : IPv6 주소에 대한 정기적 인 표현

Perl에서 필요한 경우 문자열이 IPv6 주소인지 확인하십시오.

if (/(([\da-f]{0,4}:{0,2}){1,8})/i) { print("$1") };

노력하다:

/^(((?=(?>.*?(::))(?!.+\3)))\3?|([\dA-F]{1,4}(\3|:(?!$)|$)|\2))(?4){5}((?4){2}|((2[0-4]|1\d|[1-9])?\d|25[0-5])(\.(?7)){3})\z/ai

에서:http://home.deds.nl/~aeron/regex/

다음은 내가 찾은 IPv6의 모든 예제에 대해 다음과 같습니다.

/^\s*((([0-9A-Fa-f]{1,4}:){7}([0-9A-Fa-f]{1,4}|:))|(([0-9A-Fa-f]{1,4}:){6}(:[0-9A-Fa-f]{1,4}|((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3})|:))|(([0-9A-Fa-f]{1,4}:){5}(((:[0-9A-Fa-f]{1,4}){1,2})|:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3})|:))|(([0-9A-Fa-f]{1,4}:){4}(((:[0-9A-Fa-f]{1,4}){1,3})|((:[0-9A-Fa-f]{1,4})?:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){3}(((:[0-9A-Fa-f]{1,4}){1,4})|((:[0-9A-Fa-f]{1,4}){0,2}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){2}(((:[0-9A-Fa-f]{1,4}){1,5})|((:[0-9A-Fa-f]{1,4}){0,3}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){1}(((:[0-9A-Fa-f]{1,4}){1,6})|((:[0-9A-Fa-f]{1,4}){0,4}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(:(((:[0-9A-Fa-f]{1,4}){1,7})|((:[0-9A-Fa-f]{1,4}){0,5}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:)))(%.+)?\s*$/

사용하기 전에 한 줄인지 확인하십시오. 여기에서 발견되었습니다.

https://community.helpsystems.com/forums/intermapper/miscellyancle-topics/5acc4fcf-fa83-e511-80cf-0050568460e4

질문 페이지, 커뮤니티 페이지 및 Wikipedia 사이트에서 모든 예제에서 확인되었습니다.

https://en.wikipedia.org/wiki/ipv6

검증 도구가 여기에서 사용되는 도구를 사용합니다.

https://regex101.com/

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top