我需要在我編寫的C++程序中實現正則表達式,並且我想使用re2但我無法在Windows上編譯它。有誰知道另一個正則表達式庫或任何它被稱爲在Windows上很容易編譯,不是一個「回溯」正則表達式引擎,但基於自動機理論(無論是什麼意思)像re2是?基於自動機的替代re2
或者只是搞清楚如何在Windows上編譯re2將是完美的。
我需要在我編寫的C++程序中實現正則表達式,並且我想使用re2但我無法在Windows上編譯它。有誰知道另一個正則表達式庫或任何它被稱爲在Windows上很容易編譯,不是一個「回溯」正則表達式引擎,但基於自動機理論(無論是什麼意思)像re2是?基於自動機的替代re2
或者只是搞清楚如何在Windows上編譯re2將是完美的。
看一看
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')*;
獲取的在http://code.google.com/p/re2win/編譯成
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;
我已經RE2的端口適用於Windows。它建立了很多警告,沒有錯誤。
你有什麼編譯問題? – 2010-07-06 01:10:45
事情沒有被定義,主要是。有十億個錯誤。如果有幫助,我可以將它們全部粘貼到鍵盤上。 – Langley 2010-07-06 01:15:00
我是端口到Windows http://code.google.com/p/re2win/的作者,只需要小心自動轉換爲整數(自己進行轉換)。 – unixman83 2011-12-27 22:36:52