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;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值