[regex] 정규식을 사용하여 텍스트에서 UUID 검색
정규식을 사용하여 텍스트 블록에서 UUID를 검색하고 있습니다. 현재 모든 UUID가 8-4-4-4-12 16 진수 패턴을 따르는 것으로 가정하고 있습니다.
누구 든지이 가정이 유효하지 않아 UUID를 놓칠 수있는 유스 케이스를 생각할 수 있습니까?
답변
나는 당신의 정규 표현식이 UUID를 놓치지 않는다는 것에 동의합니다. 그러나 특히 Microsoft의 GUID (Globally Unique Identifier)를 검색하는 경우 GUID에 대해 5 개의 동등한 문자열 표현이 있습니다.
"ca761232ed4211cebacd00aa0057b223"
"CA761232-ED42-11CE-BACD-00AA0057B223"
"{CA761232-ED42-11CE-BACD-00AA0057B223}"
"(CA761232-ED42-11CE-BACD-00AA0057B223)"
"{0xCA761232, 0xED42, 0x11CE, {0xBA, 0xCD, 0x00, 0xAA, 0x00, 0x57, 0xB2, 0x23}}"
답변
UUID의 정규식은 다음과 같습니다.
\b[0-9a-f]{8}\b-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-\b[0-9a-f]{12}\b
답변
@ivelin : UUID는 수도를 가질 수 있습니다. 따라서 문자열을 toLowerCase ()하거나 다음을 사용해야합니다.
[a-fA-F0-9]{8}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{12}
방금 이것을 언급했지만 충분하지 않은 담당자 🙂
답변
버전 4 UUID의 형식은 xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx입니다. 여기서 x는 16 진수이며 y는 8, 9, A 또는 B 중 하나입니다. 예를 들어 f47ac10b-58cc-4372-a567-0e02b2c3d479.
출처 : http://en.wikipedia.org/wiki/Uuid#Definition
따라서 이것은 기술적으로 더 정확합니다.
/[a-f0-9]{8}-[a-f0-9]{4}-4[a-f0-9]{3}-[89aAbB][a-f0-9]{3}-[a-f0-9]{12}/
답변
특정 UUID 버전 을 확인하거나 확인 하려면 해당 정규식이 있습니다.
참고 것이 유일한 차이점은 버전 번호 에 설명되어,
4.1.3. Version
장 UUID 4122 RFC는 .
버전 번호는 세 번째 그룹의 첫 번째 문자입니다. [VERSION_NUMBER][0-9A-F]{3}
:
-
UUID v1 :
/^[0-9A-F]{8}-[0-9A-F]{4}-[1][0-9A-F]{3}-[89AB][0-9A-F]{3}-[0-9A-F]{12}$/i
-
UUID v2 :
/^[0-9A-F]{8}-[0-9A-F]{4}-[2][0-9A-F]{3}-[89AB][0-9A-F]{3}-[0-9A-F]{12}$/i
-
UUID v3 :
/^[0-9A-F]{8}-[0-9A-F]{4}-[3][0-9A-F]{3}-[89AB][0-9A-F]{3}-[0-9A-F]{12}$/i
-
UUID v4 :
/^[0-9A-F]{8}-[0-9A-F]{4}-[4][0-9A-F]{3}-[89AB][0-9A-F]{3}-[0-9A-F]{12}$/i
-
UUID v5 :
/^[0-9A-F]{8}-[0-9A-F]{4}-[5][0-9A-F]{3}-[89AB][0-9A-F]{3}-[0-9A-F]{12}$/i
답변
/^[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89AB][0-9a-f]{3}-[0-9a-f]{12}$/i
Gajus의 정규 표현식은 UUID V1-3 및 5가 유효하더라도 거부합니다.
답변
[\w]{8}(-[\w]{4}){3}-[\w]{12}
대부분의 경우 나를 위해 일했습니다.
또는 당신이 정말로 구체적이기를 원한다면 [\w]{8}-[\w]{4}-[\w]{4}-[\w]{4}-[\w]{12}
.