16 진수에 대한 정규식?


113

텍스트에서 16 진수를 감지하는 정규식을 어떻게 만듭니 까?

예 : '0x0f4', '0acdadecf822eeff32aca5830e438cb54aa722e3'및 '8BADF00D'.


1
Regex는 실제로 구문 분석하지 않습니다. 숫자와 같은 것을 모두 추출하고 16 진수가 아닌 것은 걸러 내십시오.
Blender 2012

답변:


193

다음은 어떻습니까?

0[xX][0-9a-fA-F]+

0으로 시작하고 그 뒤에 소문자 또는 대문자 x가 뒤 따르고 0-9, af 또는 AF 범위에있는 하나 이상의 문자가 뒤 따르는 표현식과 일치합니다.


35
로 축약 할 수 /0x[\da-f]/i있지만 그렇지 않으면 +1입니다.
Niklas B.

20
@NiklasB. 속기는 perl regex를 사용하는 경우에만 유효하고 POSIX regex를 사용하는 경우 Steven의 솔루션이 가장 짧습니다. 어느 쪽이든 Steven의 솔루션은 perl 및 POSIX 정규식 모두에서 작동합니다.
David M. Syzdek 2012

알았다! 16 진수가 0x 또는 0X로 시작하면 Steven의 솔루션이 좋습니다. 이것은 더 잘 작동 할 것입니다 : ^ [0-9A-F] + $ 또한 다음과 같은 16 진수 패턴을 인식 할 수 있습니다 : '535GH0G73'자바의 경우,이를 확인하기 위해 예를 들어 String.matches ()를 사용할 수 있습니다. 응답 해 주셔서 감사합니다. :)
saurcery

2
'0X [\ DA-F] {2} propaply보다 너무 수를 제한
Yazan Rawashdeh

2
두 번째 및 세 번째 예제 번호 인 0acdadecf822eeff32aca5830e438cb54aa722e3 및 8BADF00D와 일치합니까?
Peter Mortensen

43

정확한 구문은 정확한 요구 사항과 프로그래밍 언어에 따라 다르지만 기본적으로 다음과 같습니다.

/[0-9a-fA-F]+/

또는 더 간단하게 i대소 문자를 구분하지 않습니다.

/[0-9a-f]+/i

운이 좋으면 Ruby를 사용할 수 있습니다.

/\h+/

편집 -Steven Schroeder의 답변으로 0x 비트에 대한 이해가 잘못되었음을 깨달았으므로 그에 따라 제안을 업데이트했습니다. 0x도 일치 시키려면 다음과 같습니다.

/0[xX][0-9a-fA-F]+/
/0x[0-9a-f]+/i
/0x[\h]+/i

추가 추가-0x 가 선택 사항이어야하는 경우 (질문에서 알 수 있듯이) :

/(0x)?[0-9a-f]+/i

위 RE의 이유를 설명해 주시겠습니까?
saurcery

4
@noobDroid 구체적으로 무엇을 설명하고 싶습니까?
SimonMayer 2012

18

큰 문제는 아니지만 대부분의 정규식 엔진은 POSIX 문자 클래스를 지원 [:xdigit:]하며 일반적인 0-9a-fA-F것 보다 간단한 16 진 문자를 일치시키기위한 것이 있습니다.

따라서 요청 된 정규식 (즉, 선택 사항 포함 0x)은 다음 과 같습니다./(0x)?[[:xdigit:]]+/



11

MD5 (예제 중 하나) 감지는 다음과 같이 수행 할 수 있습니다.

[0-9a-fA-F]{32}


3

기록을 위해 다음을 지정합니다.

/^[xX]?[0-9a-fA-F]{6}$/

가된다는 사실을 확인한다는 점에서 어느 다르다 가지고 우리가 하나가 여섯 개 유효한 문자와 경우에 소문자 나 대문자 X에를 포함 할 수 있습니다.


2

문자열 중간에있는 특정 16 진 문자를 찾으려면 "\ xhh"를 사용할 수 있습니다. 여기서 hh는 16 진 문자입니다. 나는 시도했고 작동합니다. 저는 C ++ Qt 용 프레임 워크를 사용하지만 다른 경우에는 문제를 해결할 수 있으며 사용해야하는 버전 (php, javascript, python, golang 등)에 따라 다릅니다.

이 답변은 http://ult-tex.net/info/perl/ 에서 가져 왔습니다.


야! 이것이 perl의 경우에는 사실 일 수 있지만 모든 프로그래밍 언어에서 정규식의 경우에는 해당되지 않는 것 같습니다. 에 따르면 \x 에 해당합니다 \u다른 언어입니다.
Maurice

"특수 안다"는 무엇입니까?
Peter Mortensen

0

이것은 유효한 쌍이 세 개 이하인지 확인합니다.

(([a-fA-F]|[0-9]){2}){3}

세 쌍 이하의 유효한 문자는 일치하지 않습니다.


0

사용자가 입력 할 수있는 경우에 당신은 입력에서이 필요 0하고 0x를 빼고도 아니지만 16 진수를 0x접두사 :

^0?[xX]?[0-9a-fA-F]*$

0

또 다른 예 : css 색상의 16 진수 값은 파운드 기호 또는 해시 (#)로 시작한 다음 숫자 또는 A와 F 사이의 문자가 될 수있는 6 자 (포함)입니다.

^#[0-9a-fA-F]{6}
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.