为什么下面的增强正则表达式没有返回我正在寻找的结果(以0或更多空格开头,后跟一个或多个星号)?
boost::regex tmpCommentRegex("(^\\s*)\\*+");
for (std::vector<std::string>::iterator vect_it =
tmpInputStringLines.begin(); vect_it != tmpInputStringLines.end();
++vect_it) {
boost::match_results<std::string::const_iterator> tmpMatch;
if (boost::regex_match((*vect_it), tmpMatch, tmpCommentRegex,
boost::match_default) == 0) {
std::cout << "Found comment " << (*vect_it) << std::endl;
} else {
std::cout << "No comment" << std::endl;
}
}在以下输入上:
* Script 7
[P]%OMO * change
[P]%QMS * change
[T]%OMO * change
[T]%QMM * change
[S]%G1 * Resume
[]这应该是
Found comment * Script 7
No comment
No comment
No comment
No comment
No comment
No comment 发布于 2012-09-14 07:27:40
引用自documentation for regex_match
请注意,只有当表达式与输入序列的匹配时,结果才为真。如果您想搜索序列中某个位置的表达式,那么可以使用
regex_search。如果希望匹配字符串的前缀,那么可以使用设置了match_continuous标志的regex_search。
作为一个整体,您的正则表达式与您的输入行都不匹配,因此程序按预期工作。您应该使用regex_search来获得所需的行为。
此外,regex_match和regex_search都返回bool而不是int,因此测试== 0是错误的。
https://stackoverflow.com/questions/12416018
复制相似问题