我正在使用正则表达式在文本块中搜索uuid。目前,我依赖于所有uuid都遵循8-4-4-4-12十六进制数字模式的假设。

有人能想到这样一个用例吗?在这个用例中,这个假设是无效的,并且会导致我错过一些uuid。


当前回答

UUID可以有大写字母。所以你需要toLowerCase()字符串或使用:

[a-fA-F0-9] {8} - {4} [a-fA-F0-9] [a-fA-F0-9] {4} - {4} [a-fA-F0-9] [a-fA-F0-9] {12}

本想评论一下,但没有足够的代表:)

其他回答

根据定义,UUID是32个十六进制数字,用连字符分隔为5组,正如您所描述的那样。你不应该错过任何正则表达式。

http://en.wikipedia.org/wiki/Uuid#Definition

官方uuid库使用以下正则表达式:

/^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i

见参考

对于在OS X上使用uuidgen生成的UUID,正则表达式模式为

[A-F0-9]{8}-[A-F0-9]{4}-4[A-F0-9]{3}-[89AB][A-F0-9]{3}-[A-F0-9]{12}

验证与

uuidgen | grep -E "[A-F0-9]{8}-[A-F0-9]{4}-4[A-F0-9]{3}-[89AB][A-F0-9]{3}-[A-F0-9]{12}"

我同意根据定义,你的正则表达式不会遗漏任何UUID。然而,如果你特别搜索微软的全球唯一标识符(GUID),那么GUID有五个等效的字符串表示形式,这可能是有用的:

"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}}" 

(\ w) {8} (-) (\ w) {4} {3} - [\ w]{12}在大多数情况下为我工作。

或者如果你想要真正特定[\ w] {8} - {4} (\ w) (\ w) {4} - {4} (\ w) (\ w){12}。