设为首页 加入收藏

TOP

C++ boost 正则表达式用法(二)
2011-12-29 14:45:18 】 浏览:4024
Tags:boost 正则 表达式 用法
 

 

模板类:
l         basic_regex          用来保存一个“正则表达式”的类。
l         sub_match            继承于pair<Iterator,Iterator>迭代器组,用来表示匹配的一个结果。
l         match_results             sub_match的容器,用来表示一次搜索或匹配算法的所有结果,类似于vector<sub_match>。
算法:
l         regex_math   匹配算法,测试一个字符串是否和一个正则式匹配,并通过match_results返回结果。
l         regex_find     查找算法,查找字符串的一个和正则式匹配的字串,并通过match_results返回结果。
l         regex_format       替换算法,查找字符串中的所有匹配正则式的字串,并使用“格式化字符”串替换。
迭代器:
l         regex_iterator      枚举一个字符串中所有匹配的字串,regex_iterator的结果相当于match_results。
l         regex_token_iterator 枚举一个字符串中所有匹配的字串,regex_iterator的结果相当于sub_match。
 
详述

l       basic_regex


template <class charT, class traits = regex_traits<charT>, class Allocator = std::allocator<charT>  >

class basic_regex;

typedef basic_regex<char> regex;

typedef basic_regex<wchar_t> wregex;

很明显,charT是正则式的字符类型,regex和wregex是basic_regex的两个特化。
注意,正则式的字符类型要和需要匹配的字符串的字符类型相同。例如:不能在regex_find算法中分别使用string和wregex最为参数,要么是string和regex,要么是wstring和wregex。
构造函数:
basic_regex re
 产生空的正则式
 
basic_regex re(str)
 正则式为str,str可以为basic_string,也可以是0结尾的char*字符串。
 
Basic_regex re(re2)
 拷贝构造。
 
basic_regex re(str,flag)
 正则式为str,使用flag语法选项,flag是一组常量的组合。例如:icase可以使正则式匹配忽略大小写。
 
basic_regex re(beg,end)
 使用迭代器构造正则式。可以是basic_string的迭代器,也可以是const char*。
 
basic_regex re(beg,end,flag)
 使用迭代器构造正则式,flag是语法选项。
 


常用的语法选项:
regex_constants::normal
 默认的语法。符合EMCAScript,java script中的正则式。
 
regex_constants::icase
 匹配的时候忽略大小写。
 
regex_constants::nosubs
 不把匹配的子串保存进match_results结构。
 
regex_constants::collate
 对于[a-b]的匹配,考虑地区
 


 
语法选项通过或运算来结合。在basic_regex中这些语法选项也进行了定义,所以可以写成regex::normal,这要比regex_constants少打好几个字母了吧!J
assign成员函数:
re.assign(re2)
 复制一个正则式
 
re.assign(str)
 正则式为str。
 
re.assign(str, flag)
 正则式为str,使用flag语法选项,flag是一组常量的组合。
 
re.assign(beg, end)
 使用迭代器构造正则式。
 
re.assign(beg, end, flag)
 使用迭代器构造正则式,flag是语法选项。
 


 
其实basic_regex很多用法和basic_string很像,因为正则表达式也是个字符串嘛!
迭代器:
regex::iterator it
 常迭代器类型,即const_iterator
 
re.begin()
 返回的是常迭代器哦!const_iterator
 
re.end()
 没有逆向迭代器。
 


例如:copy(re.begin(), re.end(), ostream_iterator<char>(cout));
其他:
re.size()
 正则表达式长度,即str的长度。
 
re.max_size()
 正则表达式的最大长度。
 
re.empty()
 长度是否为0
 
re.mark_count()
 返回正则式的组数,一般情况下为小括号对数+1。在boost.regex中使用小括号分组,详情请看下面的算法详解。
 
re.flags()
 返回语法选项。
 
cout<<re
 正则式的流输出,相当于上面示例的copy算法。
 
swap
 成员函数,全局函数都有
 
re.imbue(loc)
 设置local为loc,返回原来的local
 
re.getloc()
 得到当前local
 
==,!=,<,<=,>,>=
 比较运算符重载
 


 
l       sub_match
sub_match是一个迭代器组,表示正则式中的一个匹配。


template <class BidirectionalIterator>

class sub_match : public std::pair<BidirectionalIterator, BidirectionalIterator>;

boost没有提供sub_match的任何特化,因为我们不会显示的声明一个sub_match变量。sub_match是作为match_results的元素用的。比如:match_results的operator[]和迭代器返回的就是一个特化的sub_match。
唯一的成员变量:
bool matched  是否匹配。
成员函数:
length()
 返回长度,即两个迭代器之间的距离。
 
operator basic_string< value_type>() 
 隐式的basic_string转换。
 
str()
 显式的basic_string转换。
 

首页 上一页 1 2 3 4 下一页 尾页 2/4/4
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇C/C++正则表达式应用 下一篇深入浅出C/C++中的正则表达式库(..

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目