質問

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

または、WindowsでRE2をコンパイルする方法を考え出すだけで完璧です。

役に立ちましたか?

解決

正規表現はTR1標準の一部であるため、すでに持っている可能性があります <tr1/regex> ヘッダー 含む a 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;

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

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top