博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Regex: 正则表达式(3).
阅读量:6799 次
发布时间:2019-06-26

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

hot3.png

前面介绍了 std::regex来存储正则表达式,

std::regex_match和std::regex_search来使表达式和指定字符串配对.

但是在std::regex_match和std::regex_search匹配到字符串的时候会把匹配的结果存放到std::match_resultsstd::sub_match.

  • std::match_results:
template
> > class match_results;

由上面的声明可以看出来std::match_results的构造函数不接受任何参数,但是我们必须提供模板参数:

BidirIt的两种提供方式:

1, std::match_results<std::basic_string<char>::const_iterator>;

2, std::match_results<const char*>;

另外我们也可以提供一个allocator!

还有需要我们注意的是我们提供BidirIt的时候注意要么是const_iterator要么就是const char*,为什么会这样呢?翻看了一下介绍发现匹配的结果其实是 指向被匹配的字符串的迭代器 也就是说 如果被匹配的字符串 被销毁了那么 匹配的结果也就不能用了.

 

 

std::match_results::match_results

//可以提供一个allocator.explicit match_results( const Allocator& a = Allocator() );//拷贝构造函数match_results( const match_results& rhs );//移动构造函数.match_results( match_results&& rhs );

std::match_results::operator=

match_results& operator=( const match_results& other );	match_results& operator=( match_results&& other );

std::match_results::get_allocator

//返回指定的allocator.allocator_type get_allocator() const;

std::match_results::ready

bool ready() const;

检查std::match_results的状态,默认情况下是not ready的,只有在匹配了regex后才是ready的.

std::match_results::empty

bool empty() const;

检查匹配时候成功,不成功则为empty的返回true.

std::match_results:: size

size_type size() const;

返回匹配到的字符串中子字符串的数目.

 

#include 
#include
int main (){ std::string mystring ("subject"); std::smatch mymatches; std::regex myregex ("(sub)(.*)"); std::regex_match ( mystring, mymatches, myregex ); std::cout << mymatches.size() << " matches found:" << std::endl; for (unsigned i=0; i

std::match_results::max_size

size_type max_size() const;

返回std::match_results可容纳的最多的子表达式的数量.

std::match_results::length

difference_type length( size_type n = 0 ) const;

返回匹配到的第n个子字符串的长度. 默认为0返回匹配到的字符串的长度.

std::match_results::positon

difference_type position( size_type n = 0 ) const;

将返回 std::distance(prefix().first, (*this)[sub].first);

 

std::match_results::str

string_type str( size_type n = 0 ) const;

返回匹配到的字符串中的第n个子字符串.

std::match_results::operator[]

const_reference operator[]( size_type n ) const;

返回匹配到的字符串中的第n个子字符串. 也请注意这里的const_reference其实是对std::sub_match.

std::match_results::prefix

const_reference prefix() const;

返回匹配到的字符串的前缀(也就是前面未被匹配到的部分).也请注意这里的const_reference其实是对std::sub_match.

std::match_results::suffix

const_reference suffix() const;

返回匹配到的字符串的后面的未被匹配到的字符串. 也请注意这里的const_reference其实是对std::sub_match.

std::match_results::format

template< class OutputIt >OutputIter format( OutputIt out,                   const char_type* fmt_first, const char_type* fmt_last,                   std::regex_constants::match_flag_type flags =                       std::regex_constants::format_default ) const;template< class OutputIt, class ST, class SA >OutputIter format( OutputIt out,                   const basic_string
& fmt, std::regex_constants::match_flag_type flags = std::regex_constants::format_default ) const;template< class ST, class SA >std::basic_string
format( const std::basic_string
& fmt, std::regex_constants::match_flag_type flags = std::regex_constants::format_default ) const; string_type format( const char_type* fmt_s, std::regex_constants::match_flag_type flags = std::regex_constants::format_default ) const;

有点类似std::regex_replace.看一个demo:

#include 
#include
#include
int main(){ std::string s = "for a good time, call 867-5309"; std::regex phone_regex("\\d{3}-\\d{4}"); std::smatch phone_match; if (std::regex_search(s, phone_match, phone_regex)) { std::string fmt_s = phone_match.format( "$`" // $` means characters before the match "[$&]" // $& means the matched characters "$'"); // $' means characters following the match std::cout << fmt_s << '\n'; } }
  • std::sub_match

std::sub_match::sub_match

template
class sub_match;

也有两种指定模板参数的方式:

1, std::sub_match<std::basic_string<char>::const_iterator>;

2, std::sub_match<const char*>;

 

std::sub_match::length

difference_type length() const;

返回字符串的长度.

std::sub_match::operator string_type 和 std::sub_match::str()效果一样都是返回一个字符串.

转载于:https://my.oschina.net/SHIHUAMarryMe/blog/729181

你可能感兴趣的文章
Framework7 索引列表插件的异步加载实现
查看>>
CSS min-height最小高度max-height最大高度(转发)
查看>>
Ubuntu14.04下安装MatlabR2014A
查看>>
2016-7-5
查看>>
2016-12-26 (遇到的问题)
查看>>
网络编程---发送http请求
查看>>
nginx配置文件语法高亮
查看>>
JS获取CSS属性值
查看>>
Crimm Imageshop 2.3。
查看>>
java算法 第七届 蓝桥杯B组(题+答案) 4.分小组
查看>>
C#获取硬件信息
查看>>
Fork/Join 框架-设计与实现(翻译自论文《A Java Fork/Join Framework》原作者 Doug Lea)...
查看>>
一步一步配置 Dell OME 监控 Dell 服务器硬件报警
查看>>
[matlab] 18.图与网络 (转载)
查看>>
小初高试卷生成程序—代码优缺点
查看>>
Android中给TextView设置粗体和下划线
查看>>
获取网页内容区域各种高/宽汇总
查看>>
DS博客作业01—日期抽象数据类型设计与实现
查看>>
【BFS】HDU1429 - 胜利大逃亡(续)
查看>>
linux下mysql忘记root密码的解决方案
查看>>