【正则表达式1】C++11正则表达式
https://www.cnblogs.com/pukaifei/p/5546968.html
【正则表达式1】C++11正则表达式
头文件
#include <regex>
regex_match:整个字符串是否匹配

regex reg1("\\w+day");
string s1 = "saturday";
string s2 = "saturday and sunday";
smatch r1;
smatch r2;
cout << boolalpha << regex_match(s1, r1, reg1) << endl; //true
cout << boolalpha << regex_match(s2, r2, reg1) << endl; //false
cout << "s1匹配结果:" << r1.str() << endl; //saturday
cout << "s2匹配结果:" << r2.str() << endl; //空
cout << endl;

regex_match:只返回第一个匹配结果

smatch rr1;
smatch rr2;
cout << boolalpha << regex_search(s1, rr1, reg1) << endl; //true
cout << "s1匹配结果:" << rr1.str() << endl; //saturday
cout << boolalpha << regex_search(s2, rr2, reg1) << endl; //true
cout << "s1匹配结果:" << rr2.str() << endl; //saturday
cout << endl;

iterator:返回多个匹配结果
类似于指针,调用成员要用"->"

cout << "iterator结果:" << endl;
sregex_iterator it(s2.begin(), s2.end(), reg1);
sregex_iterator end;
for(; it != end; ++it)
{
cout << it->str() << endl;
//cout << *it << endl; 错误
} cout << "token_iterator结果:" << endl;
sregex_token_iterator tit(s2.begin(), s2.end(), reg1);
sregex_token_iterator tend;
for(; tit != tend; ++tit)
{
cout << tit->str() << endl;
cout << *tit << endl;
}

子表达式匹配

regex reg2("(\\d{1,3}):(\\d{1,3}):(\\d{1,3}):(\\d{1,3})");
string ip = "0:11:222:333";
smatch m;
regex_match(ip, m, reg2);
cout << "输出:str()" << endl;
cout << m.str() << endl; //0:11:222:333
cout << m.str() << endl; //0
cout << m.str() << endl; //11
cout << m.str() << endl; //222
cout << m.str() << endl; //333
cout << "输出:[i]" << endl; //结果同上
cout << m[] << endl;
cout << m[] << endl;
cout << m[] << endl;
cout << m[] << endl;
cout << m[] << endl;

多个匹配结果

string ip2 = "0:11:222:333 4:55:66:7";
sregex_iterator ip_it(ip2.begin(), ip2.end(), reg2);
sregex_iterator ip_end;
for(; ip_it != ip_end; ++ip_it)
{
cout << ip_it->str() << endl;
cout << ip_it->str() << endl;
cout << ip_it->str() << endl;
cout << ip_it->str() << endl;
cout << ip_it->str() << endl;
}

总的程序:
#include <iostream>
#include <string>
#include <regex>
using namespace std; int main()
{
//regex_match匹配整个字符串
regex reg1("\\w+day");
string s1 = "saturday";
string s2 = "saturday and sunday";
smatch r1;
smatch r2;
cout << boolalpha << regex_match(s1, r1, reg1) << endl;
cout << boolalpha << regex_match(s2, r2, reg1) << endl;
cout << "s1匹配结果:" << r1.str() << endl;
cout << "s2匹配结果:" << r2.str() << endl;
cout << endl; //regex_match只返回第一个匹配结果
smatch rr1;
smatch rr2;
cout << boolalpha << regex_search(s1, rr1, reg1) << endl;
cout << "s1匹配结果:" << rr1.str() << endl;
cout << boolalpha << regex_search(s2, rr2, reg1) << endl;
cout << "s1匹配结果:" << rr2.str() << endl;
cout << endl; //使用iterator返回多个匹配结果
//结果要用->
cout << "iterator结果:" << endl;
sregex_iterator it(s2.begin(), s2.end(), reg1);
sregex_iterator end;
for(; it != end; ++it)
{
cout << it->str() << endl;
//cout << *it << endl; 错误
} cout << "token_iterator结果:" << endl;
sregex_token_iterator tit(s2.begin(), s2.end(), reg1);
sregex_token_iterator tend;
for(; tit != tend; ++tit)
{
cout << tit->str() << endl;
cout << *tit << endl;
} //子表达式匹配
regex reg2("(\\d{1,3}):(\\d{1,3}):(\\d{1,3}):(\\d{1,3})");
string ip = "0:11:222:333";
smatch m;
regex_match(ip, m, reg2);
cout << "输出:str()" << endl;
cout << m.str() << endl;
cout << m.str() << endl;
cout << m.str() << endl;
cout << m.str() << endl;
cout << m.str() << endl; cout << "输出:[i]" << endl;
cout << m[] << endl;
cout << m[] << endl;
cout << m[] << endl;
cout << m[] << endl;
cout << m[] << endl; //输出结果同上
//regex_search(ip, m, str2);
cout << endl;
string ip2 = "0:11:222:333 4:55:66:7";
sregex_iterator ip_it(ip2.begin(), ip2.end(), reg2);
sregex_iterator ip_end;
for(; ip_it != ip_end; ++ip_it)
{
cout << ip_it->str() << endl;
cout << ip_it->str() << endl;
cout << ip_it->str() << endl;
cout << ip_it->str() << endl;
cout << ip_it->str() << endl;
} return ; }
参考:
http://www.cnblogs.com/zhuyp1015/archive/2012/04/08/2438191.html
http://www.cnblogs.com/zhuyp1015/archive/2012/04/08/2438215.html

【正则表达式1】C++11正则表达式的更多相关文章
- C++11 | 正则表达式(4)
C++11还支持正则表达式里的子表达式(也叫分组),用sub_match这个类就行了. 举个简单的例子,比如有个字符串"/id:12345/ts:987697413/user:678254& ...
- c++11 正则表达式基本使用
c++ 11 正则表达式 常用的方法 regex_match regex_search regex_replace 等. regex_match 要求正则表达式必须与模式串完全匹配,例如: strin ...
- 理解c++11正则表达式 (1)
概要 C++11提出了正则表达式这个概念,只需在头文件中包含#include<regex>即可.我们可以完成: Match 将整个输入拿来比对匹配某个正则表达式 Search 查找与正则表 ...
- C++11 正则表达式简单运用
正则表达式(regular expression)是计算机科学中的一个概念,又称规则表达式,通常简写为regex.regexp.RE.regexps.regexes.regexen. 正则表达式是一种 ...
- python进阶11 正则表达式
python进阶11 正则表达式 一.概念 #正则表达式主要解决什么问题? #1.判断一个字符串是否匹配给定的格式,判断用户提交的又想的格式是否正确 #2.从一个字符串中按指定格式提取信息,抓取页面中 ...
- linux正则表达式之-基础正则表达式(基于grep)
linux正则表达式: 简单的说,正则表达式就是为处理大量的字符串而定义的一套规则和方法,如:假设@代表123456,!代表abcde.通过定义的这些特殊符号的铺助,系统管理员就可以快速的过滤,替换或 ...
- RegExp正则表达式规则以及常用正则表达式
html,body { font-family: "SF UI Display", ".PingFang SC", "PingFang SC" ...
- Java 正则表达式详解_正则表达式
body{ font-family: "Microsoft YaHei UI","Microsoft YaHei",SimSun,"Segoe UI& ...
- python正则表达式模块re:正则表达式常用字符、常用可选标志位、group与groups、match、search、sub、split,findall、compile、特殊字符转义
本文内容: 正则表达式常用字符. 常用可选标志位. group与groups. match. search. sub. split findall. compile 特殊字符转义 一些现实例子 首发时 ...
随机推荐
- c# 正则表达式 首字母转大写
class Program { static void Main(string[] args) { // Input strings. const string s1 = "samuel a ...
- (诊断)处理错误fatal error: Python.h: No such file or directory
安装与Python版本对应的 python-dev 即可,比如: $ -dev
- Python——getpass
getpass模块提供了可移植的密码输入,一共包括下面两个函数: 1. getpass.getpass() 2. getpass.getuser() getpass.getpass([prompt[, ...
- Python——eventlet.wsgi
eventlet 的 wsgi 模块提供了一种启动事件驱动的WSGI服务器的简洁手段,可以将其作为某个应用的嵌入web服务器,或作为成熟的web服务器,一个这样的web服务器的例子就是 Spawnin ...
- Android开源库项目集锦
一.兼容类库 ActionBarSherlock : Action Bar是Android 3.0后才開始支持的,ActionBarSherlock是让Action Bar功能支持2.X后的全部平台. ...
- PHP替换回车换行的三种方法
一个小小的换行,其实在不同的平台有着不同的实现,为什么要这样,世界是多样的! 本来在Unix世界换行用/n来代替换行, Windows为了体现不同,就用/r/n, 更有意思的是,Mac中又用了/r. ...
- Unity3D Shader基础教程
原文地址:http://bbs.9ria.com/thread-212557-1-1.html 此教程将指引你如何建立自己的Shaders,让你的游戏场景看起来更好.Unity配备了强大的阴影和材料的 ...
- 使用 ML Pipeline 构建机器学习工作流
http://www.ibm.com/developerworks/cn/opensource/os-cn-spark-practice5/
- bootstrapValidator 表单验证
官网下载地址:http://plugins.jquery.com/bootstrapValidator/ html代码 <!DOCTYPE html> <html> <h ...
- Robot Framework分层、开发系统关键字
开发系统关键字:http://www.cnblogs.com/fnng/p/4261293.html http://www.cnblogs.com/fnng/p/3969978.htm ...