0

次のブースト正規表現が、探している結果を返さないのはなぜですか(0またはそれ以上の空白で始まり、その後に1つ以上のアスタリスクが続きます)?

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両方が戻っboolて、そうではないintので、テスト== 0は間違っています。

于 2012-09-13T23:27:39.693 に答える