首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >基于自动机的re2替代方案

基于自动机的re2替代方案
EN

Stack Overflow用户
提问于 2010-07-06 09:02:34
回答 3查看 673关注 0票数 2

我需要在我正在编写的C++程序中实现正则表达式,我想使用re2,但我无法在windows上编译它。有没有人知道另一个正则表达式库或者它的名字叫什么,它在windows上很容易编译,不是一个“回溯”的正则表达式引擎,而是一个像re2这样的基于自动机理论的引擎(不管这意味着什么)?

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

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2010-07-06 09:16:58

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

票数 1
EN

Stack Overflow用户

发布于 2010-07-06 14:20:01

看一看

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

它是一个外部数字用户线路,所以从技术上讲不是C++。但是,因为它从正则表达式生成纯C++ /C,所以它应该比在运行时构建的任何东西都快得多。/

例如。

代码语言:javascript
复制
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编译为

代码语言:javascript
复制
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;
票数 1
EN

Stack Overflow用户

发布于 2011-12-02 06:24:56

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3182927

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档