时间:2021-05-20
regex库中涉及到的主要类型有:
首先说明三个函数功能上的不同,std::regex_match是全文匹配,即它希望你输入的字符串要和正则表达式全部匹配,才认为匹配成功,否则匹配失败,而std::regex_search是在你输入的字符串中不断搜索符合正则表达式描述的子字符串,然后将第一个匹配到的子字符串返回。std::regex_replace是在std::regex_search的基础上更进一步,可以将匹配的子字符串替换为你提供的字符串。
看几个例子:
#include <iostream>#include <string>#include <regex>int main() { std::regex pattern("\\d{4}"); std::string content("hello_2018"); std::smatch result; if (std::regex_match(content, result, pattern)) { std::cout << result[0]; } system("pause"); return 0;}匹配失败,什么都不会输出。
这里说明一下为什么输出的是result[0],其实result[0]返回的就是一个sub_match类型的对象。regex中认为正则表达式的每个括号对构成一个子匹配项,并认为整个字符串作为0号子匹配项,然后根据左括号出现的位置,从1号开始编号,因此返回的result[0]就是匹配整个正则表达式的字符串。
#include <iostream>#include <string>#include <regex>int main() { std::regex pattern("\\d{4}"); std::string content("hello_2018 by_2017"); std::smatch result; if (std::regex_search(content, result, pattern)) { std::cout << result[0]; } system("pause"); return 0;}搜索到第一个符合正则表达式的子串,输出 2018。
#include <iostream>#include <string>#include <regex>int main() { std::regex pattern("\\d{4}"); std::string content("hello_2018 by_2017"); std::smatch result; auto begin = content.cbegin(); auto end = content.cend(); while (std::regex_search(begin, end, result, pattern)) { std::cout << result[0] << " "; begin = result[0].second; } system("pause"); return 0;}用上述方式可以输出字符串中所有符合正则表达式匹配要求的字符串,输出 2018 2017。
#include <iostream>#include <string>#include <regex>int main() { std::regex pattern("\\d{4}"); std::string content("hello_2018 by_2017"); std::string result = std::regex_replace(content, pattern, "everyone"); std::cout << result; system("pause"); return 0;}输出 hello_everyone by_everyone。
以上就是c++11提供的regex模块的主要脉络,其余的关于对const char* 、wcahr_t类型的支持,以及regex_iterator、regex_token_iterator等迭代器的使用,以及掌控正则表达式行为方式的syntax_option_type的详细内容,等你需要去了解的时候去看官网的详解,相信学起来并不难。
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对的支持。
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
下面列出Python正则表达式的几种匹配用法:1.测试正则表达式是否匹配字符串的全部或部分regex=ur""#正则表达式ifre.search(regex,s
Regex类表示不可变(只读)的正则表达式。它还包含各种静态方法,允许在不显式创建其他类的实例的情况下使用其他正则表达式类。正则表达式基础概述什么是正则表达式在
在C#中,我们一般使用Regex类来表示一个正则表达式。一般正则表达式引擎支持以下3种匹配模式:单行模式(Singleline)、多行模式(Multiline)
本文介绍在C#中使用匹配中文的正则表达式,包括纯中文、有中文、中文开头、中文结尾等几个正则表达式示例。在正则表达式中,中文可以通过Unicode编码来确定正则表
正则表达式简介正则表达式,又称正规表示式、正规表示法、正规表达式、规则表达式、常规表示法(英语:RegularExpression,在代码中常简写为regex、