我面临一个奇怪的问题,就是boost :: regex_match给出所有NULL结果。
抱歉问题描述不好。让我复制并粘贴下面的代码。
我认为升级版本应该是Boost 1-47-0。 Linux上的GCC 4.3.2。
#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;
}
但是,在日志中,显示非常奇怪。
有人可以帮我解决这个问题吗?非常感谢您的帮助。
如果提供的信息不够,请随时留下您的评论,稍后我会添加。
答案 0 :(得分:0)
您的代码在Windows 7(64位)上使用Boost 1.55,GCC 4.9.2可以正常工作
升级安装可能会出现问题
以下代码产生以下结果(如您所料)
$ ./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})