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的使用,可能有一些比较笨拙的地方,如果你也感兴趣,并且很了解的话,不妨一起探讨一下吧。呵呵~
本文介绍了在Linux环境下使用C++ Boost库进行字符串处理的一些实用方法,包括正则表达式匹配、字符串分割及提取匹配信息。示例代码展示了如何利用Boost的regex_match、sregex_token_iterator和regex_search函数进行操作。
11万+

被折叠的 条评论
为什么被折叠?



