使用正则表达式处理ASCII字符

时间:2013-08-30 22:45:36

标签: c++ regex

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

3 个答案:

答案 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];
}