boost xpressive: неправильный матч? - PullRequest
1 голос
/ 26 июня 2011

Я хочу сопоставить простое выражение с boost , но оно ведет себя странно ... Код ниже должен соответствовать и отображать «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

Ответы [ 2 ]

1 голос
/ 26 июня 2011

Вместо printf() используйте оператор << для печати объекта sub_match (what[1]). Или вы можете попробовать использовать what[1].str() вместо what[1].

См. Документы: sub_match , match_results , regex_match

0 голосов
/ 15 января 2012

Удалите квадратные скобки вокруг \ w в регулярном выражении И используйте std :: cout для печати. Тогда вы получите желаемый результат.

...