基于自动机的替代re2

时间:2010-07-06 01:02:34

标签: c++ regex expression re2

我需要在我正在编写的C ++程序中实现正则表达式,我想使用re2但是我无法在windows上编译它。有没有人知道另一个正则表达式库或者它所谓的在Windows上轻松编译并且不是“回溯”正则表达式引擎,但是基于自动机理论的那个(无论如何)就像re2一样?

或者只是弄清楚如何在Windows上编译re2将是完美的。

3 个答案:

答案 0 :(得分:1)

正则表达式是TR1标准的一部分,因此您可能已经拥有<tr1/regex> std::tr1::regex {{1}}类和相关函数的标题。

答案 1 :(得分:1)

看看

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' )*;

get编译到

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;

答案 2 :(得分:0)

我在http://code.google.com/p/re2win/处有一个针对Windows的RE2端口。它建立了很多警告,没有错误。