zoukankan      html  css  js  c++  java
  • Boost之正则表达式_[转]

    http://dozb.bokee.com/1976532.html

    模板类:

    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,JavaScript中的正则式。

    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转换。

    还有就是一大堆的比较操作符的重载了,这里就不多说了。

     

    l       match_results

    match_results相当于sub_match的容器,用于表示正则式算法的返回结果。

    template <class BidirectionalIterator,

              class Allocator = allocator<sub_match<BidirectionalIterator> >

    class match_results;

     

    typedef match_results<const char*> cmatch;

    typedef match_results<const wchar_t*> wcmatch;

    typedef match_results<string::const_iterator> smatch;

    typedef match_results<wstring::const_iterator> wsmatch;

    声明很简单,有四个特化可以直接使用,不过要注意string和char*字符串使用的match_results是不同的。

    成员函数:

    m.size() :容量。

    m.max_size():最大容量。

    m.empty():容量是否为0。

    m[n]:第n个元素,即sub_match

    m.prefix():返回代表前缀的sub_match,前缀指字符串的开头到第一个匹配的开头。

    m.suffix() :返回代表后缀的sub_match,后缀之最后一个匹配的结尾到字符串的结尾。

    m.length(n):返回第n个元素的长度,即m[n].size()。

    m.position(n) :返回第n个元素的位置。

    cout<<m :流输出,输出整个匹配,相当于cout<<m[0]。因为第0个元素是整个匹配,详细情况请看下面的解释。

    m.format(fmtstr):使用格式化字符串,格式化结果,返回字符串

    m.format(fmtstr,flags):使用格式化字符串,格式化结果,返回字符串,flags是格式化选项。

    m.format(out,fmtstr):同上,但是使用输出迭代器输出结果。

    m.format(out.fmtstr,flags)同上,但是使用输出迭代器输出结果。

    迭代器:

    smatch::iterator :迭代器,常迭代器

    smatch::const_iterator :同上

    m.begin():返回常迭代器

    m.end():同上

  • 相关阅读:
    Operator开发实例
    Go构建HTTP服务
    Go依赖包的管理
    Go并发编程机制
    Go语言的基础数据类型
    k8s的APIServer流程介绍
    promise、resolve、reject、拦截响应
    AngularJS中service,factory,provider的区别
    scope
    sass入门
  • 原文地址:https://www.cnblogs.com/rooney/p/2720253.html
Copyright © 2011-2022 走看看