0

为什么以下 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 
4

1 回答 1

3

引用regex_match 的文档

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

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

此外,regex_match两者regex_search都 returnbool和 not int,所以测试 for== 0是错误的。

于 2012-09-13T23:27:39.693 回答