以下格式的正则表达式

Regex expression for the below format

本文关键字:正则表达式 格式      更新时间:2023-10-16

我需要为c ++正则表达式编写以下格式的正则表达式

Ffs\2FA2A6DA-11D5-4dc3-999A-749648B03C56PiSmmIpl\2FA2A6DA-11D5-4dc3-999A-749648B03C56.map

在这里我需要获取字符串

2FA2A6DA-11D5-4dc3-999A-749648B03C56PiSmmIpl 

表示 GUID 后跟字符

我正在尝试这个但没有效果

[0-9A-Fa-f{9}]+-[0-9A-Fa-f{4}]+-[0-9A-Fa-f{4}]+-[0-9A-Fa-f{4}]+-[0-9A-Fa-f{12}].*\$

请提供您的建议。

您可以使用

std::regex rx("[0-9A-Fa-f]{8}(?:-[0-9A-Fa-f]{4}){3}-[0-9A-Fa-f]{12}([^\\]*)")

请参阅正则表达式演示。基本上,在删除+量词的同时将限制量词移到字符类之外,然后确保正确转义(在非原始字符串文本中,\\(,最后使用[^\]*构造匹配除以外的任何 0+ 字符。

  • [0-9A-Fa-f]{8} - 8 个十六进制字符
  • (?:-[0-9A-Fa-f]{4}){3} - 出现 3 次用 - 分隔的 4 个十六进制字符
  • - - 连字符
  • [0-9A-Fa-f]{12} - 12 个十六进制字符
  • ([^\]*) - 第 1 组:除 以外的任何 0+ 字符。

C++演示:

#include <iostream>
#include <regex>
#include <string>
using namespace std;
int main() {
    regex rex1("[0-9A-Fa-f]{8}(?:-[0-9A-Fa-f]{4}){3}-[0-9A-Fa-f]{12}([^\\]*)");
    string s("Ffs\2FA2A6DA-11D5-4dc3-999A-749648B03C56PiSmmIpl\2FA2A6DA-11D5-4dc3-999A-749648B03C56.map");
    smatch m;
    if (regex_search(s, m, rex1)) {
        std::cout << "Whole match: " << m[0] << std::endl;
        std::cout << "PiSmmIpl value: " << m[1] << std::endl;
    }
    return 0;
}

输出:

Whole match: 2FA2A6DA-11D5-4dc3-999A-749648B03C56PiSmmIpl
PiSmmIpl value: PiSmmIpl