博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
理解c++11正则表达式 (1)
阅读量:4696 次
发布时间:2019-06-09

本文共 1595 字,大约阅读时间需要 5 分钟。

概要

C++11提出了正则表达式这个概念,只需在头文件中包含#include<regex>即可。我们可以完成:

  • Match 将整个输入拿来比对匹配某个正则表达式
  • Search 查找与正则表达式吻合的pattern
  • Tokenize 根据被指定的正则表达式的切分器取得语汇单元,即切词
  • Replace 简单的理解就是替换掉和正则表达式吻合的第一个子序列

 

正文

首先,我们看一下下面的代码:

regex reg1("<.*>.*
");bool found = regex_match("
value
",reg1);out(found);

.  指得是除了 换行符 以外的所有字符。

*指的是“0次或者多次”。

通过regex_match()函数判断是否吻合上述的pattern(样式)。regex_match("<tag>value</tag>",reg1)将返回true。

 

regex reg2("<(.*)>.*
");bool found = regex_match("
value
",reg2);out(found);

(.*)定义了所谓的capture group 捕获组的概念,通过这个(.*),之后就可以通过\1来指代它了。我们可以采用另一种写法(raw string):

regex reg2(R("<(.*)>.*
"));

这个方法允许准确的写出其内容。他的准确格式是R"delim()delim" delim指的是字符序列,不包含空格,括号,反斜线。

 

regex reg3("<\\(.*\\)>.*
",regex_constants::grep);bool found = regex_match("
value
",reg3);out(found);

 第二个实参类似unix grep命令。必须用额外的反斜线将欲成为group的字符包起来。

 

bool found = regex_match("
value
","<(.*)>.*
"); //errorbool found = regex_match(string("
value
"),"<(.*)>.*
"); //errorbool found = regex_match("
value
", regex("<(.*)>.*
")); //right

从上面的例子可以看出,在regex_match函数里调用string是不够的,虽然有隐式转换,但是语句会报错。

 

最后是讨论regex_search()和regex_match()的唯一的区别:

regex_match():检验是否整个字符串列 和某个正则表达式吻合。

regex_search(): 检验部分是否吻合。

我们可以查看下面的例子:

regex_search(data,regex(pattern));regex_match(data,regex("(.*|\n)* + pattern + (.*|\n)*"));

 (.*|\n)* 指的是:任何数量 任何字符包括\n。 值的是而上面的两个函数表达的意思是同一个。

 

小结

我们可以从上面的例子看出,两个函数只能进行true | false的查找?如果我想知道 我这个位置在哪儿?怎么办?那就需要介绍新版的regex_search()和regex_match()。

 

注:C++11学习笔记 转载请注明出处。

 

转载于:https://www.cnblogs.com/yusenwu/p/5291612.html

你可能感兴趣的文章
团队项目(第五周)
查看>>
SQL 优化经验总结34条
查看>>
开源 视频会议 收藏
查看>>
核心J2EE模式 - 截取过滤器
查看>>
.net开源CMS
查看>>
JdbcTemplate
查看>>
第一次使用maven记录
查看>>
SharePoint服务器端对象模型 之 使用CAML进展数据查询
查看>>
Building Tablet PC Applications ROB JARRETT
查看>>
Adobe® Reader®.插件开发
查看>>
【POJ 3461】Oulipo
查看>>
Alpha 冲刺 (5/10)
查看>>
使用Siege进行WEB压力测试
查看>>
斑马为什么有条纹?
查看>>
android多层树形结构列表学习笔记
查看>>
Android_去掉EditText控件周围橙色高亮区域
查看>>
《构建之法》第一、二、十六章阅读笔记
查看>>
arrow:让Python的日期与时间变的更好
查看>>
(转)Excel的 OleDb 连接串的格式(连接Excel 2003-2013)
查看>>
Java并发编程
查看>>