码迷,mamicode.com
首页 > 编程语言 > 详细

转:C++ Boost/tr1 Regex(正则表达式)快速指南

时间:2014-12-05 12:17:28      阅读:318      评论:0      收藏:0      [点我收藏+]

标签:style   http   io   ar   os   使用   sp   for   java   

C++ Boost/tr1 Regex(正则表达式)快速指南

正则表达式自Boost 1.18推出,目前已经成为C++11(tr1)的标准部分。

本文以Boost 1.39正则表达式为基础,应该广泛适用于其他版本的Boost。对namespace稍加修改,即可适用tr1标准。

0、regex对象

类似于Java中的Pattern,Boost中的正则表达式对象为:

boost::regex

常见构造方法2种:

 

1、regex_match

首先要明确match和search的区别:

  • match针对整个字符串,若整个串匹配,match返回true,否则false。
  • search非针对整串,若任意部分子串匹配,search返回true,否则false。

明确了这点之后,来看regex_match的三种常见用法:

(1) 使用string字符串、regex对象直接match。

这个简单明了:若card_str全串匹配了,返回1,否则0。

输出如下:

(2) 使用迭代器替换string,并给regex加入参数

如下所述,我们知道string的头3个、尾3个是垃圾字符,可以用迭代器指明match工作的begin和end位置。注意的是:boost中,不提供string、begin(int)、end(int)这种参数形式。

同时,在构造regex的时候,我们给定了一个参数boost::regex::icase,表示该正则对象将忽略大小写!

输出如下:

(3) match,并返回分组的match result

我们都知道,正则中的括号表示分组,例如:

字符串和正则:

pat3中有4个分组,则regex_match后,match result会形成5个分组,0为全串,1~4分别为1234、5678、4321、8765。

好了,看下用法吧:

输出如下:

这里要再多解释一下,smatch是match_result的模版特例化类型,特别针对std::string的:

 

 2、regex_search

下面考虑对字符串任意部分匹配的regex_search。

 

 

转:C++ Boost/tr1 Regex(正则表达式)快速指南

标签:style   http   io   ar   os   使用   sp   for   java   

原文地址:http://www.cnblogs.com/kira2will/p/4146120.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!