使用正则表达式从给定字符串模式中获取数字的简单方法是什么?
字符串模式就像,
${type:1234} ${type:2345}
我想要数字,在这种情况下,1234,2345。
字符串模式也可以包含空格
${(WS)*type(WS)*:(WS)*1234(WS)*} , ... (more like this)
我还需要检查字符串是否为有效模式,如果是,则提取数字。
我知道使用tokenizer可以轻松完成,但我认为使用正则表达式会更好。
答案 0 :(得分:1)
你使用一些魔法来实现你想要的循环:
#include <iostream>
#include <string>
int main()
{
std::string str("${type:1234} ${type:2345}");
int n = 0;
for(int i(0); i < str.length(); i++)
{
if(isdigit(str[i]))
{
n++;
while(isdigit(str[i]))
i++;
}
}
std::cout << "There are: " << n << std::endl;
std::string* strTmp = new std::string[n];
int j = 0;
for(int i = 0; i < str.length(); i++)
{
if(isdigit(str[i]))
{
while(isdigit(str[i]))
{
strTmp[j] += str[i];
i++;
}
j++;
}
}
for(int i = 0; i < n; i++)
std::cout << strTmp[i] << std::endl;
// now you have strTmo holding numbers as strings you can convert them to integer:
int *pInt = new int[n];
for(int i = 0; i < n; i++)
pInt[i] = atoi(strTmp[i].c_str());
for(int i = 0; i < n; i++)
std::cout << "value " << i+1 << ": " << pInt[i] << std::endl;
delete[] strTmp;
strTmp = NULL;
delete[] pInt;
pInt = NULL;
std::cout << std::endl;
return 0;
}