我希望能够循环遍历正在对正则表达式进行测试的字符串,如果它无法输出失败的字符串的其余部分。
即
boost::regex const string_matcher("[0-9]{5}");
if (boost::regex_match(12A45,string_matcher))
{
DCS_LOG_DEBUG("Correct\n");
}
else
{
DCS_LOG_DEBUG("Incorrect\n");
}
所以这个输出是
"A45"
答案 0 :(得分:1)
你能做的是:
循环遍历字符串的字符,并在结果不正确时循环,使用indexof(chr)打印结果,其中chr是现在在循环中的字符,然后退出循环。
答案 1 :(得分:1)
你会使用类似的东西:
(^[0-9]{5}$)|^(?:[0-9]{0,5})(.*)$
有两个捕获和一个非捕获组((?:...)
中的一个)
第一个是“正确”的数据。该字符串由5位数组成。否则跳过0-5位数,第一个“错误”字符放入第二次捕获(.?)
。请注意,即使字符串为空,此捕获也会成功。
小样本:
std::regex const string_matcher("(^[0-9]{5}$)|^(?:[0-9]{0,5})(.*)$");
std::match_results<std::string::const_iterator> match;
std::string str("123456");
std::cout << "Success: " << std::boolalpha << std::regex_match(str, match, string_matcher) << std::endl;
std::cout << "Num of sub-matches: " << match.size() << std::endl;
std::cout << "Success capture: " << std::boolalpha << match[1].matched << " at " << match.position(1) << ": '" << match[1].str() << "'" << std::endl;
std::cout << "First failed character: " << std::boolalpha << match[2].matched << " at " << match.position(2) << ": '" << match[2].str() << "'" << std::endl;
(遗憾的是我无法在ideone上编译它,因为它不支持正则表达式,在VC ++上测试过)
用以下方法测试:
(empty string)
1
AA
1AA
12345
123456
12345AA