C++;regex Visual Studio社区2015<;regex>;给出了意想不到的结果 使用Visual Studio社区2015 C++ 使用的意外结果
源代码:C++;regex Visual Studio社区2015<;regex>;给出了意想不到的结果 使用Visual Studio社区2015 C++ 使用的意外结果,c++,regex,C++,Regex,源代码: #include <regex> int main() { std::regex re("^(.)=(\\d{1,2})/(\\d{1,2})*$"); std::cmatch cm; std::regex_match("f=12/64", cm, re); for (unsigned idxMatch = 0; idxMatch < cm.size(); idxMatch++) { printf("Found
#include <regex>
int main()
{
std::regex re("^(.)=(\\d{1,2})/(\\d{1,2})*$");
std::cmatch cm;
std::regex_match("f=12/64", cm, re);
for (unsigned idxMatch = 0; idxMatch < cm.size(); idxMatch++)
{
printf("Found Match %d '%s'\n", idxMatch, cm[idxMatch]);
}
return 0;
}
#包括
int main()
{
std::regex re(“^(.)=(\\d{1,2})/(\\d{1,2})*$”;
std::cmatch-cm;
标准::正则表达式匹配(“f=12/64”,厘米,重);
for(无符号idxMatch=0;idxMatch
结果:
找到匹配的0'f=12/64'
找到匹配项1'f=12/64'
找到匹配项2'12/64'
找到匹配的3'4'
预期成果:
找到匹配的0'f=12/64'
找到匹配项1'f'
找到匹配项2'12'
找到匹配项3'64'
评注:
regex在多个其他regex系统上正常工作
包括C、Perl、Java和Javascript
正则表达式可以在我使用的每个多联机测试仪上正常工作
尝试
我尝试过用出乎意料的相同结果转义“/”
我在Microsoft网站上没有找到可能不正确的正则表达式的线索。问题是您使用的
printf
格式说明符错误。cm[idxMatch]
不是以null结尾的字符串,因此%s
说明符将不起作用。如果提供了与输出说明符匹配的错误数据类型,则行为未定义
最简单的解决方案是使用std::cout
,以及一般的类型安全输出流
为了圆满解决问题,下面是使用printf
的示例。注意输出的奇怪之处:
编辑:对于g++,使用
printf
时出现运行时错误
使用std::cout
时,我们得到了所需的输出:
停止使用printf。使用
cout
。使用cout
无法复制问题,而使用printf
这些格式说明符不正确。刚刚在VS 2015 Professional中测试过,如果我使用cout
,它可以正常工作,我会显示4组,f=12/6
,f
,12
,64
。谢谢-我将说明符更改为cm[idxMatch].str().c_str()和我期望的结果。遗憾的是,cout不是一个选项。再次感谢