我需要为c ++ regex
编写以下格式的正则表达式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}].*\\$
请提供您的建议。
答案 0 :(得分:1)
您可以使用
std::regex rx("[0-9A-Fa-f]{8}(?:-[0-9A-Fa-f]{4}){3}-[0-9A-Fa-f]{12}([^\\\\]*)")
请参阅regex demo。基本上,在删除+
量词的同时将限制量词移到字符类之外,然后确保\
被正确转义(在非原始字符串文字\\\\
中),最后匹配任何0使用\
构造的[^\\]*
以外的其他字符。
<强>详情
[0-9A-Fa-f]{8}
- 8个十六进制字符(?:-[0-9A-Fa-f]{4}){3}
- 使用-
-
- 连字符[0-9A-Fa-f]{12}
- 12个十六进制字符([^\\]*)
- 第1组:除\
以外的任何0 +字符。#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