Вопрос

Мне нужно реализовать регулярные выражения в программе C ++, которую я пишу, и я хотел использовать RE2, но я не мог скомпилировать его в Windows. Кто-нибудь знает о другой библиотеке регулярных выражений или то, что он легко называется, что легко компилируется на Windows и не является «возвратным» двигателем Regex, но на основе теории автоматов (все, что означает), как RE2?

Или просто выясняет, как компилировать RE2 на Windows будет идеальным.

Это было полезно?

Решение

Регулярные выражения являются частью стандарта TR1, поэтому шансы у вас уже есть <tr1/regex> Заголовок этого содержит а. std::tr1::regex Класс и связанные функции.

Другие советы

Посмотри на

http://www.complang.org/ragel/

Это внешний DSL, поэтому не технически C ++. Однако, как он генерирует чистый C ++ / C из регулярных выражений, он должен быть намного быстрее, чем все, что построен при выполнении ./

Например.

action dgt      { printf("DGT: %c\n", fc); }
action dec      { printf("DEC: .\n"); }
action exp      { printf("EXP: %c\n", fc); }
action exp_sign { printf("SGN: %c\n", fc); }
action number   { /*NUMBER*/ }

number = (
    [0-9]+ $dgt ( '.' @dec [0-9]+ $dgt )?
    ( [eE] ( [+\-] $exp_sign )? [0-9]+ $exp )?
) %number;

main := ( number '\n' )*;

получить компиляцию до

st0:
    if ( ++p == pe )
        goto out0;
    if ( 48 <= (*p) && (*p) <= 57 )
        goto tr0;
    goto st_err;
tr0:
    { printf("DGT: %c\n", (*p)); }
st1:
    if ( ++p == pe )
        goto out1;
    switch ( (*p) ) {
        case 10: goto tr5;
        case 46: goto tr7;
        case 69: goto st4;
        case 101: goto st4;
    }
    if ( 48 <= (*p) && (*p) <= 57 )
        goto tr0;
    goto st_err;

У меня есть порт RE2 для Windows в http://code.google.com/p/re2win/ Отказ Это строит с большим количеством предупреждений, без ошибок.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top