-1

有一个 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];
}
4

3 回答 3

1

您存储的第一个字符是零,也就是标准字符串终止符。所以你的正则表达式发现这个字符是第一个字符,并且(正确地)说它已经完成了。

于 2013-08-31T00:41:04.780 回答
0

对于这个简单的搜索,正则表达式是多余的。

std::string::size_type loc = 0;
while ((loc = my_string.find("01", loc)) != std::string::npos) {
    std::cout << "Found at: " << loc << '\n';
    ++loc;
}
于 2013-08-31T12:52:04.470 回答
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];
}
于 2013-08-31T17:52:16.853 回答