1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > C++正则表达式regex库使用方法总结

C++正则表达式regex库使用方法总结

时间:2023-03-04 09:16:26

相关推荐

C++正则表达式regex库使用方法总结

目录

一、regex库中常用组件介绍

二、regex库中常用组件使用

1、regex库组件使用准备

2、regex_match使用

3、regex_search使用

4、regex_replace使用

5、sregex_iterator使用

三、基于regex库组件构建自己的正则接口类

1、C++正则表达式接口类设计

2、C++正则表达式接口类使用

四、部分语法规则介绍

正则表达式(regular expression)的C++库regex是一种强大的描述字符序列的工具 , C++11中也将正则表达式纳入了新标准的一部分 。

一、regex库中常用组件介绍

在头文件<regex>中包含了多个我们使用正则表达式时需要用到的组件,即 #include<regex>

regex库组件详细介绍如下

二、regex库中常用组件使用

1、regex库组件使用准备

//头文件包含#include<regex>#include<iostream>using namespace std;//匹配结果存放声明smatch results; //match_results<string::const_iterator> results;是第二种存储方法//匹配字符串和正则pattern准备string str = "12月看的电视hhhhh大亨堡是不是小七的最好吃,你信不信啊?";string pattern("(会不会|是不是|能不能|信不信)");regex r(pattern); //regex 表示一个正则表达式类

2、regex_match使用

(1)输出一个字符序列和一个正则表达式的匹配结果

cout << regex_match(str, results, r) << endl; //输出结果为:0if (regex_match(str, results, r)){cout<<results[0]<<endl;}

(2)regex::icase表示匹配时忽略大小写

cout<<regex_match("aaaAAA", regex("a*", regex::icase)) << endl; //结果为1cout << regex_match("aaaAAA", regex("a*")) << endl; //结果为0

3、regex_search使用

(1)输出第一个与正则表达式匹配的子序列结果

cout << regex_search(str, results, r) << endl; //输出结果为1if (regex_search(str, results, r)){cout << results[0] << endl; //输出结果为:是不是cout << results.str() << endl; //result[]与result.str()这两种方式能够获得相同的值}

(2)利用迭代器访问到所有匹配的结果值

string::const_iterator iterStart = str.begin(); //迭代器声明string::const_iterator iterEnd = str.end();string temp;while (regex_search(iterStart,iterEnd,results,r)){temp = results[0];cout << temp << endl; iterStart = results[0].second; //更新搜索起始位置,搜索剩下的字符串}

输出结果为:是不是,信不信

4、regex_replace使用

(1)字符串替换匹配

cout << regex_replace(str, r, "hello") << endl;

输出结果为:12月看的电视hhhhh大亨堡hello小七的最好吃,你hello啊?

(2)使用regex_replace()函数调整字符串的内容和顺序

string str2 = "Hello_!";regex r2("(.{3})(.{2})_(\\d{4})!"); //匹配3个任意字符+2个任意字符+下划线+4个数字+!cout << regex_replace(str2, r2, "$1$3") << endl;//输出:Hel,将字符串替换为第一个和第三个表达式匹配的内容cout << regex_replace(str2, r2, "$1$3$2") << endl;//输出:Hello,交换位置顺序

5、sregex_iterator使用

//利用sregex_iterator迭代器.它将反复调用regex_search()来寻找文件中的所有匹配for (sregex_iterator it(str.begin(), str.end(), r), end_it; it != end_it; ++it){cout << it->str() << endl;}

输出结果为:是不是,信不信

三、基于regex库组件构建自己的正则接口类

1、C++正则表达式接口类设计

//C++正则表达式接口类设计class RegularEX{public://将一个字符序列和一个正则表达式匹配int re_match(string str){return regex_match(str,results,regex(pattern1));}//寻找第一个与正则表达式匹配的子序列int re_search(string str){return regex_search(str, results, regex(pattern1)); }//替换匹配string re_replace(string str){return regex_replace(str, regex(pattern1), pattern2);}//输入正则表达式patternvoid get_pattern1(string pat) //匹配pattern {pattern1 = pat;}void get_pattern2(string pat) //替换pattern{pattern2 = pat;}private:smatch results; //容器类,保存在string中搜索的结果string pattern1,pattern2; };

2、C++正则表达式接口类使用

int main(){string str = "12月看的电视hhhhh大亨堡是不是小七的最好吃,你信不信啊?";string pattern1("(会不会|是不是|能不能|信不信)");string pattern2("Asia-Lee");RegularEX re_ex; //声明一个正则类对象re_ex.get_pattern1(pattern1); //获取pattern1re_ex.get_pattern2(pattern2); //获取pattern2,为替换字符串cout << re_ex.re_match(str) << endl; //结果为:0cout << re_ex.re_search(str) << endl; //结果为:1cout << re_ex.re_replace(str) << endl; //结果为:12月看的电视hhhhh大亨堡Asia-Lee小七的最好吃,你Asia-Lee啊?return 0;}

四、部分语法规则介绍

\ 表示将下一字符标记为特殊字符、转义字符;C++中要注意转义字符,比如:“\\d+”;^ 表示字符串的开始,匹配输入字符串开始的位置;$ 表示字符串的结尾,匹配输入字符串结尾的位置;. 表示匹配除换行符" \n "以外的任意字符;\w 表示任意字母、数字、下划线 ;\s 表示任意空白符(tab也包含在内);\d 表示匹配单个数字字符,\D 表示非数字字符匹配;[] 表示一个字符集合,匹配指定范围内的任何字符,例如[a-z]表示字母a~z所组成的集合;[]中使用^来表示集合的补集,匹配不在指定的范围内的任何字符,例如1-3表示除1 2 3以外数字;[[:alpha:]] 表示任何字母;[[:alnum:]] 表示任何字母和数字;regex::icase 表示匹配时忽略大小写;{n} 表示正好匹配 n 次前面的字符或表达式,例如"hello{6}",匹配字符串中符合第二个l后边有6个o的子字符串;{n, } 表示至少匹配 n 次前面的字符或表达式;{n,m} 表示匹配至少 n 次,至多 m 次前面的字符或表达式;? 表示零次或一次匹配前面的字符或子表达式;\t \n \r这些平时非常常见,分别表示制表符匹配、换行符匹配、回车符匹配

详细正则表达式规则可参看:正则表达式规则

Python 正则表达式re模块学习

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。