我正在使用正则表达式在文本块中搜索uuid。目前,我依赖于所有uuid都遵循8-4-4-4-12十六进制数字模式的假设。
有人能想到这样一个用例吗?在这个用例中,这个假设是无效的,并且会导致我错过一些uuid。
我正在使用正则表达式在文本块中搜索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。然而,如果你特别搜索微软的全球唯一标识符(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}}"
bash的:
grep -E "[a-f0-9]{8}-[a-f0-9]{4}-4[a-f0-9]{3}-[89aAbB][a-f0-9]{3}-[a-f0-9]{12}"
例如:
$> echo "f2575e6a-9bce-49e7-ae7c-bff6b555bda4" | grep -E "[a-f0-9]{8}-[a-f0-9]{4}-4[a-f0-9]{3}-[89aAbB][a-f0-9]{3}-[a-f0-9]{12}"
f2575e6a-9bce-49e7-ae7c-bff6b555bda4
如果您想检查或验证特定的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} $ /我
c++的变体:
#include <regex> // Required include
...
// Source string
std::wstring srcStr = L"String with GIUD: {4d36e96e-e325-11ce-bfc1-08002be10318} any text";
// Regex and match
std::wsmatch match;
std::wregex rx(L"(\\{[A-F0-9]{8}-[A-F0-9]{4}-[A-F0-9]{4}-[A-F0-9]{4}-[A-F0-9]{12}\\})", std::regex_constants::icase);
// Search
std::regex_search(srcStr, match, rx);
// Result
std::wstring strGUID = match[1];
下面是工作的REGEX: https://www.regextester.com/99148
const regex = [0-9a-fA-F]{8}\-[0-9a-fA-F]{4}\-[0-9a-fA-F]{4}\-[0-9a-fA-F]{4}\-[0-9a-fA-F]{12}