c++ 实现字符串正则表达式匹配的几个demo.
#include<iostream>
#include <regex>
int main()
{
//完全匹配
std::cout << "完全匹配:" << std::endl;
std::string str = "1.325"; std::regex regexnum("[-+]?[0-9.,]*");
if (std::regex_match(str, regexnum))
std::cout << "matck success " << str << std::endl;
//部分匹配
std::cout << "部分匹配:" << std::endl;
str = "qwe345ccc 22rtrey";
std::regex pattern("(\\D*)(-?[0-9.,]*)([^ ]*)");
std::string tmp = std::regex_replace(str, pattern, "$2");//$2表示匹配第二个子表达式的字符串
if ("" != tmp)std::cout << tmp << std::endl;//输出所有的匹配的字符串
std::smatch result;
bool match = std::regex_search(str, result, pattern);
if (match && result.size() >= 3)
std::cout << result[2] << std::endl;//result[2]表示输出匹配第二个表达式的字符串
//将匹配部分逐个输出
str = "#document plan1 \n qwrwqtgsav \n #document ";
std::regex pattern1("(#document)([ ]?)([\\w]*)");
const std::sregex_token_iterator end; //需要注意一下这里
for (std::sregex_token_iterator i(str.begin(), str.end(), pattern1); i != end; ++i)
{
std::string asda = *i;
std::cout << *i << std::endl;
}
return 0;}
output:
完全匹配:
matck success 1.325
部分匹配:
34522
345
参考:
http://www.cplusplus.com/reference/regex/regex_replace/
http://blog.sina.com.cn/s/blog_ac9fdc0b0101oow9.html
http://www.2cto.com/kf/201402/277287.html
http://www.cnblogs.com/zhuyp1015/archive/2012/04/08/2438232.html