2015-05-18 61 views
1

我面臨一個奇怪的問題,那就是boost :: regex_match給出所有的NULL結果。C++ boost :: regex_match給出所有NULL結果

對不好的問題描述。讓我複製並粘貼下面的代碼。

我認爲boost lib版本應該是Boost 1-47-0。 GCC 4.3.2在Linux上。

#include <iostream> 
#include <string> 
#include <boost/regex.hpp> 

using namespace std; 

int main() 
{ 
    string aFreeText = "26JAN07"; 
    boost::regex expression("([0-9]{2}[A-Z]{3}[0-9]{2})"); 
    boost::smatch results; 

    if(boost::regex_match(aFreeText, results, expression)) 
    { 
     for(int index=0; index<results.size(); index++) 
      DEBUG("YI JI results[" << index << "].str(): " << results[index].str()); 
    } 

    return 0; 
} 

但是,在日誌中,顯示非常奇怪。

enter image description here

誰能好心幫我解決這個問題?您的善意幫助將不勝感激。

如果提供的信息不足,請隨時留下您的評論,我將在稍後添加它們。

回答

0

您的代碼工作正常升壓1.55,GCC 4.9.2在Windows 7(64位)

這可能是您的升壓安裝

下面的代碼產生以下結果的一個問題(如你預期)

$ ./re.exe 
Results[0].str(): 26JAN07 

C++代碼:re.cpp

#include <iostream> 
#include <string> 
#include <boost/regex.hpp> 

using namespace std; 

int main() 
{ 
    string aFreeText = "26JAN07"; 
    boost::regex expression("[0-9]{2}[A-Z]{3}[0-9]{2}"); 
    boost::smatch results; 
    if(boost::regex_match(aFreeText, results, expression)) 
    { 
     for(size_t index=0; index<results.size(); ++index) 
     { 
      std::cout<<"Results[" << index << "].str(): " << results[index].str()<<std::endl; 
     } 
    } 
    return 0; 
} 

使用CMakeLists.txt看起來像

CMAKE_MINIMUM_REQUIRED(VERSION 2.8.8) 
PROJECT(RE) 

############################################################################# 
SET(Boost_USE_STATIC_LIBS ON) 
SET(Boost_USE_MULTITHREADED OFF) 
FIND_PACKAGE(Boost 1.53 COMPONENTS regex REQUIRED) 
############################################################################# 
IF (NOT(MSVC)) 
    SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=gnu++0x") 
ENDIF() 

ADD_EXECUTABLE(re re.cpp) 
INCLUDE_DIRECTORIES(SYSTEM ${Boost_INCLUDE_DIRS}) 
TARGET_LINK_LIBRARIES(re ${Boost_LIBRARIES}) 
+0

非常感謝您的快速回復。如果是這種情況,我想我需要找到一些解決這個問題的方法。 :( – jiyi

+0

你應該嘗試這段代碼,看看它是否導致相同的問題。 –