2

作成しているC++プログラムに正規表現を実装する必要があり、re2を使用したかったのですが、Windowsでコンパイルできませんでした。Windowsで簡単にコンパイルでき、「バックトラッキング」正規表現エンジンではなく、re2のようなオートマトン理論ベースの正規表現ライブラリ(それが意味するものは何でも)である別の正規表現ライブラリまたはそれが呼ばれるものを知っている人はいますか?

または、Windowsでre2をコンパイルする方法を理解するだけでも完璧です。

4

3 に答える 3

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 に答える
1

正規表現は TR1 標準の一部であるため、クラスと関連する関数を含むヘッダーが既にある可能性があります<tr1/regex>std::tr1::regex

于 2010-07-06T01:16:58.370 に答える
0

http://code.google.com/p/re2win/に Windows 用の RE2 のポートがあります。多くの警告が表示され、エラーなしでビルドされます。

于 2011-12-01T22:24:55.510 に答える