2

我需要在我正在编写的 C++ 程序中实现正则表达式,我想使用 re2 但我无法在 Windows 上编译它。有谁知道另一个正则表达式库或任何可以在 Windows 上轻松编译的正则表达式库,并且不是“回溯”正则表达式引擎,而是像 re2 这样的基于自动机理论的引擎(无论这意味着什么)?

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

4

3 回答 3

1

正则表达式是 TR1 标准的一部分,因此您可能已经有一个包含和相关函数的<tr1/regex>标头。std::tr1::regex

于 2010-07-06T01:16:58.370 回答
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' )*;

得到编译下来

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;
于 2010-07-06T06:20:00.693 回答
0

我在http://code.google.com/p/re2win/有一个适用于 Windows 的 RE2 端口。它构建时有很多警告,没有错误。

于 2011-12-01T22:24:55.510 回答