设为首页 加入收藏

TOP

Boost 之正则表达式
2014-11-24 12:02:45 来源: 作者: 【 】 浏览:0
Tags:Boost 正则 表达式

最近做个小东西,用到了正则表达式,因为用的是C++,想赶下潮流,用下boost, 开始用boost::xpressvie, 在一台HP上一切都是正常的,然后到Sun的机器上进行编译,发现居然编译不过,晕倒了,还好及时到boost的网站上提交报告,不然自己瞎折腾,徒是浪费时间。 目前切换到 boost::regex 模块,但是遇到一问题,发现 如下正则表达式 ((0|1)+, )+ 在对于00101010 比较短时,没有问题,在001010...串很长时,直接抛出一场,哥们就不知道怎么回事了。而用boost::xpressive 则是不知道什么时候能否解析完成。


家里实验的挺快的:


#include "boost/xpressive/xpressive_dynamic.hpp"
using namespace boost::xpressive;



void test_bitmap() {



sregex reg = sregex::compile("((1|0)+, )+");
std::string datas[] = {
"aaa-1&bbb-0&ccc-1",
"1111000111",
"11001010,101100100101010010101",
"1001010010101100110010101010101001010,10101010",
"100101001010110011001010101010100101010101010"};
for (int i = 0; i < sizeof(datas) / sizeof(std::string); ++i) {
std::cout << "match result:" << regex_match(datas[i], reg) << ", data:" << datas[i] << std::endl;
}
}



int main() {
cregex reg = cregex::compile("(\\s*\\d+\\s*|(\\[|\\()\\s*\\d+\\s*,\\s*\\d+\\s*(\\]|\\)))(\\s*,\\s*(\\s*\\d+\\s*|(\\[|\\()\\s*\\d+\\s*,\\s*\\d+\\s*(\\]|\\))))*");
std::cout << regex_match("[ 10 ,100),1, 8", reg);



test_bitmap();
return 0;
}


】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇Linux学习笔记:pthread_getsched.. 下一篇Android Sensor 适配层的书写--主..

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容:

·Libevent C++ 高并发 (2025-12-26 00:49:30)
·C++ dll 设计接口时 (2025-12-26 00:49:28)
·透彻理解 C 语言指针 (2025-12-26 00:22:52)
·C语言指针详解 (经典 (2025-12-26 00:22:49)
·C 指针 | 菜鸟教程 (2025-12-26 00:22:46)