1

単純な式をboostと一致させたいのですが、動作がおかしいです...以下のコードは、最初と2番目の文字列の「a」を一致させて表示する必要があります。

#include <iostream>
#include <boost/xpressive/xpressive.hpp>

#include "stdio.h"

using namespace boost::xpressive;

void xmatch_action( const char *line ) {
    cregex g_re_var;
    cmatch what;
    g_re_var = cregex::compile( "\\s*var\\s+([\\w]+)\\s*=.*?" );


    if (regex_match(line, what, g_re_var )) {
        printf("OK\n");
        printf(">%s<\n", what[1] );
    }
    else {
        printf("NOK\n");
    }
}

int main()
{
    xmatch_action("var a = qqq");
    xmatch_action(" var a = aaa");
    xmatch_action(" var abc ");
}

しかし、私の実際の出力は次のとおりです。

OK
>a = qqq<
OK
>a = aaa<
NOK

そしてそれは

OK
>a<
OK
>a<
NOK
4

2 に答える 2

1

printf()演算子を使用してオブジェクト<<を印刷する代わりに( )。または、の代わりにを使用してみることができます。sub_matchwhat[1]what[1].str()what[1]

ドキュメントを参照してください:sub_matchmatch_resultsregex_match

于 2011-06-26T02:36:22.533 に答える
0

正規表現の\wの周りの角かっこを削除し、std::coutを使用して印刷します。その後、あなたはあなたが望む結果を得るでしょう。

于 2012-01-14T21:24:00.917 に答える