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

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


当前回答

如果您想检查或验证特定的UUID版本,下面是相应的正则表达式。

注意,唯一的区别是版本号,这将在4.1.3中解释。UUID 4122 RFC的版本章节。

版本号是第三组的第一个字符:[VERSION_NUMBER][0-9A-F]{3}:

UUID v1: / ^ [0-9A-F] {8} - {4} [0-9A-F] [1] [0-9A-F] {3} - ab [89] [0-9A-F] {3} - [0-9A-F]{12} $ /我 UUID v2: / ^ [0-9A-F] {8} - {4} [0-9A-F] [2] [0-9A-F] {3} - ab [89] [0-9A-F] {3} - [0-9A-F]{12} $ /我 UUID v3: / ^ [0-9A-F] {8} - {4} [0-9A-F] [3] [0-9A-F] {3} - ab [89] [0-9A-F] {3} - [0-9A-F]{12} $ /我 UUID v4: / ^ [0-9A-F] {8} - {4} [0-9A-F] [4] [0-9A-F] {3} - ab [89] [0-9A-F] {3} - [0-9A-F]{12} $ /我 UUID v5: / ^ [0-9A-F] {8} - {4} [0-9A-F] [5] [0-9A-F] {3} - ab [89] [0-9A-F] {3} - [0-9A-F]{12} $ /我

其他回答

uuid的正则表达式是:

[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}

如果你想强制整个字符串来匹配这个正则表达式,你有时(你的匹配器API可能有一个方法)需要用^…$,即

^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$

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

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

想要给出我的贡献,因为我的regex涵盖了OP的所有情况,并正确地将组方法上的所有相关数据分组(你不需要post处理字符串来获得uuid的每个部分,这个regex已经为你获得了它)

([\d\w]{8})-?([\d\w]{4})-?([\d\w]{4})-?([\d\w]{4})-?([\d\w]{12})|[{0x]*([\d\w]{8})[0x, ]{4}([\d\w]{4})[0x, ]{4}([\d\w]{4})[0x, {]{5}([\d\w]{2})[0x, ]{4}([\d\w]{2})[0x, ]{4}([\d\w]{2})[0x, ]{4}([\d\w]{2})[0x, ]{4}([\d\w]{2})[0x, ]{4}([\d\w]{2})[0x, ]{4}([\d\w]{2})[0x, ]{4}([\d\w]{2})

对于在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}"

版本4的uuid形式为xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx,其中x是任何十六进制数字,y是8,9,A或b中的一个,例如f47ac10b-58cc-4372-a567-0e02b2c3d479。

来源:http://en.wikipedia.org/wiki/Uuid定义

因此,从技术上讲,这是更正确的:

/[a-f0-9]{8}-[a-f0-9]{4}-4[a-f0-9]{3}-[89aAbB][a-f0-9]{3}-[a-f0-9]{12}/