提升正则表达式空白后跟一个或多个星号

时间:2012-09-13 23:02:29

标签: c++ regex boost

为什么以下提升正则表达式不会返回我正在寻找的结果(从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 

1 个答案:

答案 0 :(得分:3)

引用documentation for regex_match

  

请注意,仅当表达式与输入序列的整数匹配时,结果才为真。如果要在序列中的某个位置搜索表达式,请使用regex_search。如果要匹配字符串的前缀,请使用regex_search并设置标志match_continuous。

您的所有输入行都没有与正则表达式匹配,因此程序按预期工作。您应该使用regex_search来获得所需的行为。

此外,regex_matchregex_search都返回bool而不是int,因此对== 0的测试是错误的。