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

 
jpg改rar

【正则表达式1】C++11正则表达式的更多相关文章

  1. C++11 | 正则表达式(4)

    C++11还支持正则表达式里的子表达式(也叫分组),用sub_match这个类就行了. 举个简单的例子,比如有个字符串"/id:12345/ts:987697413/user:678254& ...

  2. c++11 正则表达式基本使用

    c++ 11 正则表达式 常用的方法 regex_match regex_search regex_replace 等. regex_match 要求正则表达式必须与模式串完全匹配,例如: strin ...

  3. 理解c++11正则表达式 (1)

    概要 C++11提出了正则表达式这个概念,只需在头文件中包含#include<regex>即可.我们可以完成: Match 将整个输入拿来比对匹配某个正则表达式 Search 查找与正则表 ...

  4. C++11 正则表达式简单运用

    正则表达式(regular expression)是计算机科学中的一个概念,又称规则表达式,通常简写为regex.regexp.RE.regexps.regexes.regexen. 正则表达式是一种 ...

  5. python进阶11 正则表达式

    python进阶11 正则表达式 一.概念 #正则表达式主要解决什么问题? #1.判断一个字符串是否匹配给定的格式,判断用户提交的又想的格式是否正确 #2.从一个字符串中按指定格式提取信息,抓取页面中 ...

  6. linux正则表达式之-基础正则表达式(基于grep)

    linux正则表达式: 简单的说,正则表达式就是为处理大量的字符串而定义的一套规则和方法,如:假设@代表123456,!代表abcde.通过定义的这些特殊符号的铺助,系统管理员就可以快速的过滤,替换或 ...

  7. RegExp正则表达式规则以及常用正则表达式

    html,body { font-family: "SF UI Display", ".PingFang SC", "PingFang SC" ...

  8. Java 正则表达式详解_正则表达式

    body{ font-family: "Microsoft YaHei UI","Microsoft YaHei",SimSun,"Segoe UI& ...

  9. python正则表达式模块re:正则表达式常用字符、常用可选标志位、group与groups、match、search、sub、split,findall、compile、特殊字符转义

    本文内容: 正则表达式常用字符. 常用可选标志位. group与groups. match. search. sub. split findall. compile 特殊字符转义 一些现实例子 首发时 ...

随机推荐

  1. Java如何检查一个线程停止或没有?

    Java如何检查一个线程停止或没有? 解决方法 下面的示例演示如何使用 isAlive()方法检查一个线程是否停止. public class Main { public static void ma ...

  2. linux -- "./configure --prefix "命令

    源码的安装一般由3个步骤组成:配置(configure).编译(make).安装(make install). Configure是一个可执行脚本,它有很多选项,在待安装的源码路径下使用命令./con ...

  3. Java线程创建的两种方式

    java多线程总结一:线程的两种创建方式及优劣比较 (一)---之创建线程的两种方式 java实现多线程的两种方法的比较

  4. Linux 用户与用户组管理

    Linux 是一个多用户多任务的分是操作系统,用户是实现操作系统资源分配,同时也是安全权限模型的核 心要素之一:用户组是一个容纳很多用户的容器,可以分配权限组,进一步优化了权限分配. 一.用户管理 用 ...

  5. R语言igraph 包-构建网络图

    igaph 是一个项目,目标是建立一条简单,易用的网络分析工具,有 R, python, C/C++ 等语言的具体实现: 项目主页: http://igraph.org/ 在R语言中,对应的就是 ig ...

  6. 多线程---再次认识volatile,Synchronize,lock

    在多线程中我们常用的保证共享变量的方法有很多,现在我们介绍其中的一种,volatile,也是效率最高的一种.    一 .volatile的意义:             为了确保共享变量能被正确和一 ...

  7. java使用javax.mail进行免费的邮件发送

    1. 建议发送方使用阿里云邮箱https://mail.aliyun.com/,阿里云默认是开启个人邮箱pop3.smtp协议的,所以无需在阿里云邮箱里设置,pop3.smtp的密码默认邮箱登录密码, ...

  8. 用Fiddler可以设置浏览器的UA 和 手动 --Chrome模拟手机浏览器(iOS/Android)的三种方法,亲测无误!

    附加以一种软件的方法是:用Fiddler可以设置浏览器的UA 以下3种方法是手动的 通过伪装User-Agent,将浏览器模拟成Android设备. 第一种方法:新建Chrome快捷方式 右击桌面上的 ...

  9. Linux top和负载的解释(转载)

    转载自://www.blogjava.net/freeman1984/archive/2011/12/08/365853.html op命令是Linux下常用的性能分析工具,能够实时显示系统中各个进程 ...

  10. hibernate validate

    http://docs.jboss.org/hibernate/validator/4.2/reference/zh-CN/html_single/  --hibernate validate htt ...