我试图在MS VC ++ 2012中使用c ++ std :: regex实现一个简单的字符串测试方法。
const std::string str = "1.0.0.0029.443";
if ( std::regex_match( str, std::regex( "\\.0\\d+" ) ) )
std::cout << "matched." << std::endl;
我猜测代码将匹配给定str的“.0029”部分。但是,它根本不匹配。 我在http://regex101.com/上尝试了它,但它确实有效。
答案 0 :(得分:3)
std::regex_match
报告完全匹配,即整个输入字符串必须与正则表达式匹配。
要匹配子序列,请使用std::regex_search
。
答案 1 :(得分:3)
使用std::regex_search
代替返回您的子匹配。
const std::string str = "1.0.0.0029.443";
std::regex rgx("(\\.0[0-9]+)");
std::smatch match;
if (std::regex_search(str.begin(), str.end(), match, rgx)) {
std::cout << match[1] << '\n';
}
答案 2 :(得分:0)
要确保您的正则表达式匹配完整字符串而不是其他任何内容,您需要这样的内容:
^(?:\d+\.)*\d+$
这转化为
if ( std::regex_match( str, std::regex( "^(?:\\d+\\.)*\\d+$" ) ) )
std::cout << "matched." << std::endl;
锚点^
和$
的开头和结尾都是必需的,否则您可能会匹配BANANA_0.1.12AND_APPLE