首先C++的正则表达式的速度比boost的正则表达式的数据要慢很多。
链接: std::regex与boost::regex的性能差5倍,有profile有真相。
简单正则表达式的使用:
一:匹配 regex_match
regex_match 要求的是内容完全匹配正则表达式,一个错误都不行。
二:搜索匹配 regex_search
regex_search 要求的是只要内容中存在正则表达式的要求就是正确的。
三:匹配替代 regex_replace
regex_replace 要求的是只要内容中存在正则表达式的要求就替换成新的文字
四:查找获取内容 sregex_iterator
五:获取匹配内容: sregex_token_iterator
正则表达式特殊字符的处理
链接:BOOST学习:BOOST_FOREACH+boost::assign处理正则表达式(特殊字符$需要单独处理)_qq_1410888563的博客-CSDN博客
正则表达式是存在特殊的字符,需要转义才能实现匹配、搜索、替换。
正则表达式简单用例场景
1.输入正整数:string re = "^\\d*$"
2.输入负整数: string re = "^[-]\\d*$";
3.输入26个字母组成:string re = "^[a-z]*$";
4. 输入26个字母大小写组成: string re = "^[a-zA-Z]*$";
5. 匹配需要的字符中间无论出现什么: string re = "帮(.)*助";
6.输入只带有一个小数点的数: string re = "^[-|\\d]\\d*[\\d|.]\\d*$";
7.输入内容不能为空: string re = "^.+$";
8.获取中括号匹配内容:string input = "\\[(.+?)\\]";
//正则表达式匹配表达式
void SplitStrByRegex(const string& str, const string& pattern, vector<string>& vec)
{
regex reg(pattern);
sregex_iterator pos(str.cbegin(), str.cend(), reg), end;
for (; pos != end; ++pos)
{
vec.push_back(pos->str(0));
}
}
9.获取分割内容:string pattern("\\|");
void SplitTokenStrByRegex(string input, const string& pattern, vector<string>& vec)
{
regex re(pattern);
sregex_token_iterator iter(input.begin(), input.end(), re, -1), end;
while (iter != end)
{
string temp = *iter++;
vec.push_back(temp);
}
}
更多推荐
C++ 正则表达式(匹配、搜索、替换)
发布评论