为什么以下提升正则表达式不会返回我正在寻找的结果(从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
答案 0 :(得分:3)
引用documentation for regex_match:
请注意,仅当表达式与输入序列的整数匹配时,结果才为真。如果要在序列中的某个位置搜索表达式,请使用
regex_search
。如果要匹配字符串的前缀,请使用regex_search
并设置标志match_continuous。
您的所有输入行都没有与正则表达式匹配,因此程序按预期工作。您应该使用regex_search
来获得所需的行为。
此外,regex_match
和regex_search
都返回bool
而不是int
,因此对== 0
的测试是错误的。