新手boost::regex使用求教~
单独编译完boost1.46的regex库了,在/usr/lib里面有libboost_regex.so和libboost_regex.a文件
尝试网上一个简单的regex_search的例子
#include <iostream>
#include <boost/regex.hpp>
using namespace std;
int main()
{
//const char *szReg = "";
const char *szStr = "a334gsd2345fas21df";
//begin search
boost::cmatch mat;//存放匹配结果
boost::regex reg("\\d+");//正则:找出数字
if(boost::regex_search(szStr,mat,reg))
{
cout<<"searched:"<<mat[0]<<endl;
}
}
这个程序大概意思是打印出szStr当中的数字
用g++ -o 这个文件名 可执行文件名 -lboost_regex编译链接通过了
可是执行“./可执行文件”的时候,却没有打印结果,再执行一次,却出现如下提示:
rst: /usr/local/include/boost/smart_ptr/shared_ptr.hpp:412: typename boost::detail::shared_ptr_traits<T>::reference boost::shared_ptr<T>::operator*() const [with T = boost::regex_traits_wrapper<boost::regex_traits<char, boost::cpp_regex_traits<char> > >]: Assertion `px != 0' failed.
已放弃
其中rst是可执行文件的名字
这是遇到什么原因呢?
[解决办法]
会不会你电脑上有几个版本的boost库?
[解决办法]
在boost官方文档中的例子中编译命令使用的是 1.36版本的库
- C/C++ code
$ c++ -I path/to/boost_1_46_1 example.cpp -o example \ -L~/boost/stage/lib/ [b]-lboost_regex-gcc34-mt-d-1_36[/b]
[解决办法]
我试了一下应该是库不匹配的原因:
请编译出regex静态多线程的库版本,重编译链接,OK!
[user1@localhost hello]$ c++ example.cpp -o example -lboost_regex-gcc41-mt-sd-1_46_1
[user1@localhost hello]$ ./example < jayne.txt
Will Success Spoil Rock Hunter?