2010-07-06 41 views
2

我需要在我編寫的C++程序中實現正則表達式,並且我想使用re2但我無法在Windows上編譯它。有誰知道另一個正則表達式庫或任何它被稱爲在Windows上很容易編譯,不是一個「回溯」正則表達式引擎,但基於自動機理論(無論是什麼意思)像re2是?基於自動機的替代re2

或者只是搞清楚如何在Windows上編譯re2將是完美的。

+1

你有什麼編譯問題? – 2010-07-06 01:10:45

+0

事情沒有被定義,主要是。有十億個錯誤。如果有幫助,我可以將它們全部粘貼到鍵盤上。 – Langley 2010-07-06 01:15:00

+1

我是端口到Windows http://code.google.com/p/re2win/的作者,只需要小心自動轉換爲整數(自己進行轉換)。 – unixman83 2011-12-27 22:36:52

回答

1

正則表達式是TR1標準的一部分,所以很有可能你已經有一個<tr1/regex>頭文件contains a std::tr1::regex類和相關函數。

+0

我對這件事一點都不懂,是否和re2一樣快? – Langley 2010-07-06 01:18:29

+0

而我正在使用Microsoft Visual C++,並且我似乎沒有文件。 – Langley 2010-07-06 01:19:46

+0

哇,應該先閱讀鏈接。 – Langley 2010-07-06 01:21:17

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')*; 

獲取的在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; 
0

我已經RE2的端口適用於Windows。它建立了很多警告,沒有錯誤。