[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. VersionUUID 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}.