有一个unsigned char的原始数组,其中包含不同的符号[0,255]。
我需要查找并提取一些字符串“01”,指定正则表达式。代码看起来像工作,但它找不到我需要的字符串,我不明白问题是什么。
stringstream rawString;
for (unsigned char i=0; i<255; i++) {
rawString << i;
}
regex pattern("[\\x00-\\xff]*(01)[\\x00-\\xff]*", regex_constants::egrep);
smatch result;
if ( regex_match( rawString.str(), result, pattern ) ) {
cout << result[1];
}
答案 0 :(得分:1)
您存储的第一个字符是零,a.k.a。标准字符串终结符。所以你的正则表达式发现这个角色是第一个,并且(正确地)说它已经完成了。
答案 1 :(得分:0)
正则表达式对于这个简单的搜索来说太过分了。
std::string::size_type loc = 0;
while ((loc = my_string.find("01", loc)) != std::string::npos) {
std::cout << "Found at: " << loc << '\n';
++loc;
}
答案 2 :(得分:0)
unsigned char rawString[256];
for (int i=0; i<256; i++) {
rawString[i] = i;
}
string str(rawString, rawString + sizeof(rawString));
regex pattern("^([^\\x00]|[\\x00])*(01)([^\\x00]|[\\x00])*$");
smatch result;
if ( regex_match( str, result, pattern ) ) {
cout << result[2];
}