2013-06-26 76 views
0

首先我想爲我的英語道歉。C++ 2011 std :: regex根本不起作用

我正在一個小型的C++項目中工作,我想保持它很小。 主要問題是我需要使用正則表達式,但他們不按我需要的方式工作。

這工作得很好:

std::string s ("subject"); 
std::regex e ("(sub)(.*)"); 
if (std::regex_match (s,e)) 
    std::cout << "string object matched\n"; 

這一個工作太細:

std::string s ("0"); 
std::regex e ("[0-9]", std::regex::extended); 
if (std::regex_match (s,e)) 
    std::cout << "string object matched\n"; 

即使我改變的std ::正則表達式::延長的std ::正則表達式:: AWK,基本或不管這段代碼不起作用:

std::string s ("00"); 
std::regex e ("[0-9]{2}", std::regex::extended); 
if (std::regex_match (s,e)) 
    std::cout << "string object matched\n"; 

我做錯了什麼?

我知道std :: regex沒有完成,但我認爲他們應該在這樣一個簡單的正則表達式中工作。

無論如何,如果任何人都可以指向我一個小正則表達式庫(不提高請)我會很感激。

aditional的信息

我工作的Linux操作系統Ubuntu 12.10,編譯器是gcc> 4.7

編輯:

@jalf:它編譯,但它給了我一個錯誤的結果在最後一個。 它給出了一個錯誤。 無法顯示任何結果因爲我今天在客戶端,我無法訪問該程序。

@KennyTM:是的,它再次是gcc/libstdC++,我一直在閱讀這個論壇尋找答案。再次,我不能使用提升。

@Pete Becker:是的,它是gcc> 4.7版本。不記得確切的版本。

+5

你使用哪個版本的哪個實現?這些都是非常新的功能,我相信這些實現具有不同的特性。 – PlasmaHH

+4

你是什麼意思它「不起作用」?它是否編譯?它會給出錯誤的結果嗎?你期望得到哪個結果,以及你實際得到了哪些結果? – jalf

+0

它又是gcc/libstdC++嗎?關於它已經有很多問題了。簡短的回答:使用Boost,或者切換到clang/libC++,或者不要使用它。 – kennytm

回答

1

它確實有效。在VS2012上,我會爲每個人找一場比賽。

  • subject」與「(sub)(.*)」匹配,因爲它包含「sub」,然後。*(其他)。
  • 0」與「[0-9]」匹配,因爲它包含0和9之間的數字。
  • 00」與「[0-9]{2}」匹配,因爲它包含0到9之間的兩個數字。
1

對我來說,在VS2008這似乎工作:

#include <iostream> 
#include <regex> 

void main() 
{ 
    std::string s ("00"); 
    std::tr1::regex e ("[0-9]{2}", std::tr1::regex::extended); 
    if (std::tr1::regex_match (s,e)) 
     std::cout << "string object matched\n"; 
} 

至少如果你使用的是Windows然後根據TR1正則表達式的MSDN上的總結(http://msdn.microsoft.com/en-us/library/bb982727.aspx)它應該工作,只在某些有些情況下,您可能需要跳過花括號(請參閱「語法摘要」一節中的表格)。如果你在Linux下,那麼我想你需要查閱關於這個主題的gcc文檔。

問朋友在Linux上運行你的原代碼(gcc版本4.6.3(Ubuntu/Linaro 4.6。3-1ubuntu5))並且它沒有工作,所以看起來問題是Linux特定的。逃避大括號也不起作用。

+0

對不起,忘了說我在Linux下工作而不是Windows。 – Thanatos