首先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++ 正则表达式(匹配、搜索、替换)