/*
正则表达式:一个指定的模式用来对文本中的字符串提供精确且灵活的匹配
*/ #include <regex>
using namespace std; int main() {
string str;
while (true) {
cin >> str;
//regex e("abc.", regex_constants::icase); // . 表示除了换行符之外任意字符
//regex e("abc?"); // ? 0个或者1个前面的字符
//regex e("abc*"); // * 0个或多个前面的字符
//regex e("abc+"); // + 1个或多个前面的字符
//regex e("ab[cd]*"); // [...] 方括号中任意字符
//regex e("ab[^cd]*"); // [^...] 任意不在方括号中的字符
//regex e("ab[cd]{3,5}");
//regex e("abc|de[\]fg]"); // | 或者
//regex e("(abc)de+\\1"); // \1 第1个子串
//regex e("(ab)c(de+)\\2\\1");
//regex e("[[:w:]]+@[[:w:]]+\.com"); // [[:w:]] :字母,数字,下划线 //regex e("abc.$"); // $ 行尾
regex e("^abc.+", regex_constants::grep); // ^ 行首,切换正则表达式语法 //bool match = regex_match(str, e); //str和e精确匹配
bool match = regex_search(str, e); //str中中包含e cout << (match? "Matched" : "Not matched") << endl << endl;
}
} /* 正则表达式语法: ECMAScript //C++默认
basic
extended
awk
grep
egrep regex e("^abc.+", regex_constants::grep); // 切换语法
*/ /*************** 处理子表达式 *****************/ /*
std::match_results<> 储存详细的匹配Store the detailed matches
smatch string类型的详细的匹配Detailed match in string smatch m;
m[0].str() 整个匹配的字符串 (同m.str(), m.str(0))
m[1].str() 第1个子串(同m.str(1))
m[2].str() 第2个子串
m.prefix() 所有匹配字符串之前的部分
m.suffix() 所有匹配字符串之后的部分
*/ int main() {
string str; while (true) {
cin >> str;
smatch m; // typedef std::match_results<string> regex e("([[:w:]]+)@([[:w:]]+)\.com"); bool found = regex_search(str, m, e); //只返回第一个匹配 cout << "m.size() " << m.size() << endl; //size()==子匹配个数+1
for (int n = 0; n< m.size(); n++) {
cout << "m[" << n << "]: str()=" << m[n].str() << endl;
cout << "m[" << n << "]: str()=" << m.str(n) << endl;
cout << "m[" << n << "]: str()=" << *(m.begin()+n) << endl;
}
cout << "m.prefix().str(): " << m.prefix().str() << endl;
cout << "m.suffix().str(): " << m.suffix().str() << endl;
}
} // 多个匹配的情况 /**************** Regex Iterator ******************/
int main() {
cout << "Hi" << endl; string str; while (true) {
cin >> str; regex e("([[:w:]]+)@([[:w:]]+)\.com"); sregex_iterator pos(str.cbegin(), str.cend(), e);
sregex_iterator end; // 默认构造定义了past-the-end迭代器
for (; pos!=end; pos++) {
cout << "Matched: " << pos->str(0) << endl;
cout << "user name: " << pos->str(1) << endl;
cout << "Domain: " << pos->str(2) << endl;
cout << endl;
}
cout << "=============================\n\n";
}
} /**************** Regex Token Iterator ******************/
int main() {
cout << "Hi" << endl; //string str = "Apple; Orange, {Cherry}; Blueberry";
string str = "boq@yahoo.com, boqian@gmail.com; bo@hotmail.com"; //regex e("[[:punct:]]+"); // 空格,数字,字母以外的可打印字符
//regex e("[ [:punct:]]+");
regex e("([[:w:]]+)@([[:w:]]+)\.com"); sregex_token_iterator pos(str.cbegin(), str.cend(), e, 0); //最后一个参数指定打印匹配结果的哪一部分,0表达整个匹配字符串,1表示第1个子串,-1表示没有匹配的部分
sregex_token_iterator end; // 默认构造定义了past-the-end迭代器
for (; pos!=end; pos++) {
cout << "Matched: " << *pos << endl;
}
cout << "=============================\n\n"; cin >> str;
} /**************** regex_replace ******************/
// 将匹配的字符串部分替换
int main() {
cout << "Hi" << endl; string str = "boq@yahoo.com, boqian@gmail.com; bo@hotmail.com"; regex e("([[:w:]]+)@([[:w:]]+)\.com");
regex e("([[:w:]]+)@([[:w:]]+)\.com", regex_constants::grep|regex_constants::icase ); //cout << regex_replace(str, e, "$1 is on $2");
cout << regex_replace(str, e, "$1 is on $2", regex_constants::format_no_copy|regex_constants::format_first_only);//format_no_copy不匹配的字符部分不拷贝到新串,只匹配第一个
cout << regex_replace(str, e, "$1 is on $2"); // $1表示第一个子串 std::cin >> str;
}

C++11--正则表达式<regex>的更多相关文章

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

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

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

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

  3. (四)boost库之正则表达式regex

    (四)boost库之正则表达式regex 正则表达式可以为我们带来极大的方便,有了它,再也不用为此烦恼 头文件: #include <boost/regex.hpp> 1.完全匹配 std ...

  4. 【正则表达式1】C++11正则表达式

    https://www.cnblogs.com/pukaifei/p/5546968.html [正则表达式1]C++11正则表达式   头文件 #include <regex> rege ...

  5. 请写出正则表达式(regex),取得下列黄色部分的字符串 TEL: 02-236-9655/9659 FAX:02-236-9654 (黄色部分即02-236-9655/9659 ) ( 测试面试题)

    请写出正则表达式(regex),取得下列黄色部分的字符串 TEL: 02-236-9655/9659 FAX:02-236-9654 答: package test1; import java.uti ...

  6. C#正则表达式Regex常用匹配

    使用Regex类需要引用命名空间:using System.Text.RegularExpressions; 利用Regex类实现验证 示例1:注释的代码所起的作用是相同的,不过一个是静态方法,一个是 ...

  7. C#正则表达式Regex类的用法

    C#正则表达式Regex类的用法 更多2014/2/18 来源:C#学习浏览量:36891 学习标签: 正则表达式 Regex 本文导读:正则表达式的本质是使用一系列特殊字符模式,来表示某一类字符串, ...

  8. C#正则表达式Regex类

    C#正则表达式Regex类的使用 C#中为正则表达式的使用提供了非常强大的功能,这就是Regex类.这个包包含于System.Text.RegularExpressions命名空间下面,而这个命名空间 ...

  9. boost 正则表达式 regex

    boost 正则表达式 regex   环境安装 如果在引用boost regex出现连接错误,但是引用其他的库却没有这个错误,这是因为对于boost来说,是免编译的,但是,正则这个库 是需要单独编译 ...

  10. python进阶11 正则表达式

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

随机推荐

  1. Linux more命令详解

    more功能类似 cat ,cat命令是整个文件的内容从上到下显示在屏幕上. more会以一页一页的显示方便使用者逐页阅读,而最基本的指令就是按空白键(space)就往下一页显示,按 b 键就会往回( ...

  2. Arcgis API for JS——打印控件乱码

    在通过Arcgis API for JS编写打印控件进行地图下载时,总发现地图字体乱码,如下图: 解决方法: 在装有ArcGIS Server,要调用服务的电脑或服务器上找到下图文件夹

  3. C语言-第一周作业

    要求1: 请在你的PC或者移动设备上安装词典,该词典工具能对计算机术语进行翻译.需要在你的博客中给出安装软件的截图,请确保阅读者能从截图判断出你的被安装的设备是PC或者移动设备.(5经验值) 要求2: ...

  4. 内存池技术(UVa 122 Tree on the level)

    内存池技术就是创建一个内存池,内存池中保存着可以使用的内存,可以使用数组的形式实现,然后创建一个空闲列表,开始时将内存池中所有内存放入空闲列表中,表示空闲列表中所有内存都可以使用,当不需要某一内存时, ...

  5. PTA——输出各位数字

    PTA 7-37 输出整数各位数字 方法1: #include <stdio.h> #define N 10000 int main(){ long n, temp; ; scanf(&q ...

  6. review

    一.123 第二部分:面向对象 . 谈谈你对面向对象的认识. . 约束 Java: - 接口,约子类中必须包含某个方法(约束). Interface IMessage: def func1(self) ...

  7. 构建工具 buildtool

    一.什么是build tool? 构建工具是从源代码自动创建可执行应用程序的程序.构建包括将代码编译,链接和打包成可用或可执行的形式.在小项目中,开发人员通常会手动调用构建过程.这对于较大的项目来说是 ...

  8. 用Git向gitHub上传项目

    用Git向gitHub上传项目 1.安装git 2.在git安装目录下,运行git-bash.exe  如图所示 3.在git中绑定你注册gitHub是的用户名.邮箱. $ git config -- ...

  9. hibernate中Restrictions的用法

    方法 说明 Restrictions.eq = Restrictions.allEq 利用Map来进行多个等于的限制 Restrictions.gt > Restrictions.ge > ...

  10. vue全家桶+Koa2开发笔记(7)--登陆注册功能

    1 文件结构:pages中放置页面代码:server 分为 dbs 和interface两个文件夹: dbs设置有关数据库的代码:interface设置接口信息: 2.2 先看dbs的,在dbs的配置 ...