C++ 之Boost学习笔记--Linux下编程

本文介绍了在Linux环境下使用C++ Boost库进行字符串处理的一些实用方法,包括正则表达式匹配、字符串分割及提取匹配信息。示例代码展示了如何利用Boost的regex_match、sregex_token_iterator和regex_search函数进行操作。

C++学习笔记--Linux下编程
一、关于Boost的使用,几种常用方法,只是自己工作、学习中总结的,有些方法的确有些繁琐,能满足需求,应该还有更加简单快捷的方式,待改进。
1、判断字符串与正则表达式是否匹配(完全匹配)
bool IsMatch(const char* data,const char * regx)
{
    boost::regex expression(regx);
    string str(data);
   
    if(boost::regex_match(str, expression))
    {
        return true;
    }
    return false;
}

2.1、按某一字符串进行分割操作,并存储到vector中。
void split1(const char* data,boost::regex expression,vector<string> &dataVector)
{
   string str1(data);//将char *转化为string类型
   boost::sregex_token_iterator     p(str1.begin( ), str1.end( ), expression, -1);
   boost::sregex_token_iterator end;
   const char *start=NULL,*endp;
   while (p != end)
   {
       
       string str = *p;
       printf("string:[%s]/n",str.c_str());
       if ( str.compare("") != NULL )
       {
           dataVector.push_back(str);
       }
       p++;
   }
  
}
2.2、按某一字符串进行分割操作,并存储到vector中,并保留分割符中的几位。
void split2(const char* data,boost::regex expression,vector<string> &dataVector,int length)
{
   if ( length < 0 )
   {
       return ;
   }
   string str1(data);//将char *转化为string类型
   boost::sregex_token_iterator     p(str1.begin( ), str1.end( ), expression, -1);
   boost::sregex_token_iterator end;
   const char *start=NULL,*endp;
   while (p != end)
   {
       string str = *p;
       if(start==NULL)
       {
            str = *p;
       }
       else
       {
           endp=&(*((*p).second));
           string tstr(start+length,endp-start-length);
           str=tstr;
       }
       printf("string:[%s]/n",str.c_str());
       if(str.compare("")!=NULL)
       {
           dataVector.push_back(str);
       }
       start=&(*((*p).second));
       p++;
   }
  
}
3、从字符串中选出与正则表达式匹配的字符串信息,并通过字符串返回。
/**
* data:欲处理的字符串
* pression:欲取出数据的正则表达式
* flag:
*   true:正则表达式中使用()
*   false:正则表达式中未使用()
* size:无用的数据长度
* temp:符合要求的数据
**/
bool  SearchItem(string data,string pression,bool flag,int size,string &temp)
{
    boost::smatch match; 
    std::string::const_iterator begin = data.begin();
    std::string::const_iterator end = data.end();
    boost::regex regexperson(pression, boost::regex::perl|boost::regex::icase);
    bool bMatch = boost::regex_search(begin,end,match,regexperson);
    if (bMatch)
    {
        const char* subStr = NULL;
        const char* endStr = NULL;
        const char* substr2 = NULL;
        subStr = &(*(match[0].first));
        substr2 = &(*(match[0].second));
        endStr = &(*(match[1].first));
        if ( flag )
        {
            if(endStr > subStr)
            {
                string temp1(subStr+size,endStr - subStr-size);
                temp = temp1;
                return true;
            }
        }
        else
        {
            if(substr2 > subStr)
            {
                string temp1(subStr+size,substr2 - subStr-size);
                temp = temp1;
                return true;
            }
        }
    }
    return false;
}

注:
1、当通过函数传入字符串数据时使用const char * data。
2、当通过函数传出字符串数据时,最好使用string &data;这时如果使用char *&,很容易出现内存被占用,出现段错误。
这只是我在学习中使用的关于Boost的使用,可能有一些比较笨拙的地方,如果你也感兴趣,并且很了解的话,不妨一起探讨一下吧。呵呵~

 

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值