2017-03-29 52 views
1

我必须编写一个C++正则表达式,但是我不能在regex_match上得到正确的结果,因为我是C++新手。 用于测试的字符串是:D10A7; 可以说unsigned_char[] stringToBeTested="D10A7"; 我要做的是在regex_match之后,我将在两个不同的short变量中提取10和7以供应用程序使用。 'D'后的数字总是两位数字,'A'后的数字总是 是一位数字。 我尝试做的是:为什么regex_match与我的正则表达式不匹配?

boost::regex re("D([0-9])(/([0-9]))?"); 
boost::cmatch mr; 
if (boost::regex_match(stringToBeTested, mr, re)) 
{  
    number = atoi(mr.str(1).c_str()); //Must be 10 
    axis = atoi(mr.str(2).c_str()); //Must be 7 
} 

如何生成的boost ::正则表达式再为这个情况,请详细解释了答案。

+1

什么是斜杠?您尝试匹配的字符串中没有斜线? –

+0

在附注上,我建议使用更多的C++ ish ['std :: stoi()'](http://en.cppreference.com/w/cpp/string/basic_string/stol),它允许你除去''.c_str()',这在纯粹的C++代码中是没有用的,例如, G。 'number = stoi(mr.str(1))'。 – zett42

回答

3

regex_match需要完整的字符串匹配。你需要提供一个能够做到这一点的模式。

boost::regex re("D([0-9]{2})A([0-9])"); 

这里,

  • D - 匹配D
  • ([0-9]{2}) - 捕捉到第1组两个数字
  • A - 匹配A
  • ([0-9]) - 捕捉到第2组单个数字。

请参阅online demo of the above regex

+0

感谢您的回答,只是为了澄清疑问,可以说我有'D124',它必须存储号码= 12和轴= 3。现在将会是什么样的regix(因为我已经在这里删除了'A')。 '/'在正则表达式中的作用是什么。我无法找到好的文档,但尚未很好地理解。 –

+1

您可以使用['^ D([0-9] {2})(?:A?([0-9]))?$'](https://regex101.com/r/Zp1vk0/1)然后。 '/'符号在正则表达式中没有具体含义,它被匹配为一个文字'/'符号。 –

+0

而这个'?'标记意味着什么? –

相关问题