IPv4 유효성 검사를 위해 효율적인 정규식을 얻으려고 노력했지만 많은 운이 없었습니다. 언젠가 나는 그것을 가지고 있었던 것처럼 보였지만 (25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?(\.|$)){4}
이상한 결과를 낳습니다.
$ grep --version
grep (GNU grep) 2.7
$ grep -E '\b(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?(\.|$)){4}\b' <<< 192.168.1.1
192.168.1.1
$ grep -E '\b(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?(\.|$)){4}\b' <<< 192.168.1.255
192.168.1.255
$ grep -E '\b(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?(\.|$)){4}\b' <<< 192.168.255.255
$ grep -E '\b(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?(\.|$)){4}\b' <<< 192.168.1.2555
192.168.1.2555
나는 이것이 이미 질문하고 대답했는지 확인하기 위해 검색했지만 다른 대답은 단순히 1-3 개의 숫자로 된 4 그룹을 결정하는 방법을 보여 주거나 나를 위해 작동하지 않는 것 같습니다.
답변
이미 작동하는 대답을 얻었지만 원래 접근 방식에 무엇이 잘못되었는지 궁금한 경우 대답은 번갈아 가며 괄호가 필요하다는 것입니다. 그렇지 않으면 (\.|$)
숫자가 200 미만인 경우에만 필요합니다.
'\b((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)(\.|$)){4}\b'
^ ^
답변
^((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$
동의 :
127.0.0.1
192.168.1.1
192.168.1.255
255.255.255.255
0.0.0.0
1.1.1.01
거부 :
30.168.1.255.1
127.1
192.168.1.256
-1.2.3.4
1.1.1.1.
3...3
단위 테스트로 온라인 시도 : https://www.debuggex.com/r/-EDZOqxTxhiTncN6/1
답변
가장 짧고 가장 읽기 어려운 최신 버전 ( 55 자 )
^((25[0-5]|(2[0-4]|1[0-9]|[1-9]|)[0-9])(\.(?!$)|$)){4}$
이 버전은 250-5 케이스를 찾은 후 케이스에 대해 가능한 모든 케이스를 영리하게 OR 처리합니다 200-249
100-199
10-99
. 것을 알 수 |)
부분은 실수가 아니라 실제로 논리합을 0-9 범위의 마지막 경우. ?:
캡처 된 항목에 대해 실제로 신경 쓰지 않기 때문에 캡처하지 않는 그룹 부분 도 생략했습니다 . 처음에 전체 경기를하지 않으면 캡처되지 않을 것입니다.
이전 버전과 더 짧은 버전 (가독성이 낮음) ( 63 자 )
^(?:(25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9]?[0-9])(\.(?!$)|$)){4}$
이전 (읽을 수있는) 버전 ( 70 자 )
^(?:(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])(\.(?!$)|$)){4}$
부정적인 예견 (?!)
을 사용하여 ip가 a로 끝날 수있는 경우를 제거합니다..
가장 오래된 답변 ( 115 자 )
^(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\.){3}
(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])$
나는 이것이 가장 정확하고 엄격한 정규식이라고 생각 000.021.01.0.
합니다. 여기에있는 대부분의 다른 답변처럼 보이는 것과 같은 것을 받아들이지 않으며 그와 유사한 경우를 거부하기 위해 추가 정규식이 필요 0
합니다..
답변
IPv4 주소 (정확한 캡처) 0.0.0.0에서 255.255.255.255까지 일치이 정규식을 사용하여 IP 번호를 정확하게 일치시킵니다. 4 개의 번호 각각은 캡처 그룹에 저장되므로 추가 처리를 위해 액세스 할 수 있습니다.
\b
(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.
(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.
(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.
(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)
\b
JGsoft RegexBuddy 라이브러리에서 가져온
편집 :이 (\.|$)
부분은 이상해 보인다
답변
나는 IPv4 주소와 비슷한 것을 찾고 있었는데, 일반적으로 사용되는 개인 ip 주소의 유효성 검사를 중지 한 정규식 (192.168.xy, 10.xyz, 172.16.xy)이이를 달성하기 위해 부정적인 예측을 사용했습니다.
(?!(10\.|172\.(1[6-9]|2\d|3[01])\.|192\.168\.).*)
(?!255\.255\.255\.255)(25[0-5]|2[0-4]\d|[1]\d\d|[1-9]\d|[1-9])
(\.(25[0-5]|2[0-4]\d|[1]\d\d|[1-9]\d|\d)){3}
(물론 한 줄에 있어야하며, 가독성을 위해 3 줄로 나누어야합니다.)
속도에 최적화되어 있지 않을 수 있지만 ‘실제’인터넷 주소를 찾을 때만 잘 작동합니다.
실패 할 (그리고해야 할) 것들 :
0.1.2.3 (0.0.0.0/8 is reserved for some broadcasts)
10.1.2.3 (10.0.0.0/8 is considered private)
172.16.1.2 (172.16.0.0/12 is considered private)
172.31.1.2 (same as previous, but near the end of that range)
192.168.1.2 (192.168.0.0/16 is considered private)
255.255.255.255 (reserved broadcast is not an IP)
.2.3.4
1.2.3.
1.2.3.256
1.2.256.4
1.256.3.4
256.2.3.4
1.2.3.4.5
1..3.4
작동 할 (및 작동해야하는) IP :
1.0.1.0 (China)
8.8.8.8 (Google DNS in USA)
100.1.2.3 (USA)
172.15.1.2 (USA)
172.32.1.2 (USA)
192.167.1.2 (Italy)
다른 사람이 ‘공통 개인 주소를 포함하지 않는 인터넷 IP 주소’의 유효성을 확인하려는 경우 제공
답변
이 게시물을 읽는 많은 사람들은 기술적으로 유효하지 않은 IP 주소와 일치하더라도 더 간단한 정규식을 찾고있을 것이라고 생각합니다. (그리고 다른 곳에서 언급했듯이 정규식은 어쨌든 IP 주소를 올바르게 검증하는 데 적합한 도구가 아닐 수 있습니다.)
제거 ^
교체, 해당되는 경우, 그리고 $
함께 \b
당신이 라인의 시작 / 끝과 일치하지 않으려면.
기본 정규식 (BRE) (GNU grep, GNU sed 및 vim에서 테스트 됨) :
/^[0-9]\+\.[0-9]\+\.[0-9]\+\.[0-9]\+$/
확장 정규식 (ERE) :
/^[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+$/
또는:
/^([0-9]+(\.|$)){4}/
Perl 호환 정규식 (PCRE) (Perl 5.18에서 테스트 됨) :
/^\d+\.\d+\.\d+\.\d+$/
또는:
/^(\d+(\.|$)){4}/
Ruby (Ruby 2.1에서 테스트 됨) :
PCRE로 간주되지만 Ruby는 어떤 이유로 든 Perl 5.18에서 허용하지 않는이 정규식을 허용했습니다.
/^(\d+[\.$]){4}/
이 모든 것에 대한 나의 테스트는 여기에서 온라인 입니다.
답변
이것은 일부보다 약간 길지만 IPv4 주소를 일치시키는 데 사용하는 것입니다. 타협없이 간단합니다.
^((25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9]?[0-9])\.){3}(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9]?[0-9])$