Boost库学习(7)regex

说到文本处理,无论你是使用sed,awk还是写一段什么语言的程序,最终的法宝总会是正则表达式。Boost默认使用Perl的正则表达式形式,个人觉得Perl的正则是最强大的。

正则表达式

  • 定位类(不消耗文本)
    ^ 起始位置
    $ 结束位置
    < 单词起始
    > 单词结束
    \b 单词边界(包括起始和结束)
    \B 非单词边界
    (?=pattern) 前面满足pattern
    (?!pattern) 前面不满足pattern
    (?<=pattern) 后面满足pattern
    (?<!pattern) 后面不满足pattern
  • 分组类
    (pattern) 分组,计算分组序号
    (?pattern) 分组,计算分组序号,并且可以用名字name来访问
    (?:pattern) 分组,不计算分组序号
    \N或\g{N} 代表与前面第N个分组的内容相同
    \g{name} 代表与前面name分组的内容相同
  • 字符类
    . 单个任意字符
    [字符列表] 列表中的字符
    [^字符列表] 列表以外的字符
    字符1|字符2 字符1或者字符2
    \d或[[:digit:]] 数字
    \w或[[:word:]] 字母
    \s或[[:space:]] 空白
    \l或[[:lower:]] 小写
    \u或[[:upper:]] 大写
    \D或[[:digit:]] 非数字
    \W或[^[:word:]] 非字母
    \S或[^[:space:]] 非空白
    \L或[^[:lower:]] 非小字
    \U或[^[:upper:]] 非大字
  • 次数类
    {m} 匹配m次
    * 匹配0次或多次,尽可能多
    + 匹配1次或多次,尽可能多
    {m,n} 匹配m次到n次,尽可能多
    {m,} 匹配m次或多次,尽可能多
    上面4个的后面加上?的话(如+?),就变成尽可能少
  • 输出类
    $N或${N} 代表第N个分组的内容
    $+{name} 代表name分组的内容
    $&或$MATCH或${^MATCH} 代表整个匹配内容
    $`或$PREMATCH或${^PREMATCH} 代表匹配内容之前的内容
    $'或$POSTMATCH或${^POSTMATCH} 代表匹配内容之后的内容
    \l 下一个字符小写
    \u 下一个字符大写
    \L 之后的输出小写,直到\E
    \U 之后的输出大写,直到\E
    \E 结束\L或\U

regex函数

  • boost::regex_match
    bool boost::regex_match(str[,match_result],pat[,flag]);
    bool boost::regex_match(begin,end[,match_result],pat[,flag]);
    pat必须匹配字符串的全部
    pat的申明方式:
    • boost::regex pat(regex-str[,flag]);
    • pat.assign(regex-str[,flag]);
      注意:regex-str中的”/“要用”//“,或者用C++11的新特性RawString(R"delim(…)delim”)
  • boost::regex_search
    bool boost::regex_search(str[,match_result],pat[,flag]);
    bool boost::regex_search(begin,end[,match_result],pat[,flag]);
    与regex_match类似,只是pat可以只匹配字符串的一部分
  • boost::regex_replace
    string boost::regex_replace(str,pat,out-format[,flag]);
  • boost::regex_iterator
    boost::regex_iterator([begin,end,pat]);
    对应的类型为boost::match_results
    boost::match_results的常用成员:
    • size()
    • prefix()
    • suffix()
    • [n]
    • length(n)==[n].length()
    • position(n)==[n].first
  • boost::regex_token_iterator
    boost::regex_token_iterator([begin,end,pat,submatch]);
    对应的类型为boost::sub_match(boost::match_results可以看作是boost::sub_match的数组)
    当submatch>=0时,regex_token_iterator(begin,end,pat,submatch)==regex_iterator(begin,end,pat)[submatch]
    当submatch==-1时,表示用pat作为分隔符来分割字符串
    boost::sub_match的常用成员:
    • length()
    • str()
    • first
    • second

你可能感兴趣的:(C++,boost)