zoukankan      html  css  js  c++  java
  • boost中regex的使用

    boost是对STL的补充,regex是其中一个模块。各方法类别很多,本文记录常用方法。

    引入头文件<boost/regex.hpp>

    1. regex_match

      regex reg("\\d{3}");
      string str = "123";
      bool b = regex_match(str,reg);


    2.regex_replace(string s, regex e, string t),把s中匹配了e的子串替换为t

      regex reg("(colo)(u)(r)",boost::regex::icase|boost::regex::perl);
      string s="Colour,colour,color,colOurize";
      s=regex_replace(s,reg,"$1$3");


    t中的$n代表reg中的第n个括号里的内容,$3表示r,$1表示colo。上段代码表示把colour换成color,boost::regex::icase/boost::regex::perl是标志开关,表示忽略大小写。可以把需要的标志开关打开,不需要时默认关闭。

    regex_replace不修改原字符串,而是生成一个新串返回

    3.erase_all_regex(string, regex),(boost::algorithm::erase_all_regex,in header <boost/algorithm/string/regex.hpp>),删除满足regex的所有子串,它是在原串中直接修改

    #include <boost/algorithm/string/regex.hpp>
    erase_all_regex(str, boost::regex("[\n|\t|\r]"))

    删除字符串str中的所有空格

    4.split_regex(序列式容器, string, regex),(<boost/algorithm/string/regex.hpp>),分割符为regex格式,分割string,将结果存放在容器中

    #include <boost/algorithm/string/regex.hpp>
    vector<string> fields;
    split_regex( fields, str, boost::regex("[\\*|X]"));
    

    如果str = "5*6",fields中存放的是5和6。str不会被修改。

    5.split(序列式容器,string,Predicate), (<boost/algorithm/string/split.hpp>)。

    #include <boost/algorithm/string/split.hpp>
    #include <boost/algorithm/string/classification.hpp>
    vector<string> result;
    split(result, school_code, is_any_of(";"));

    is_any_of,用于判断school_code中是否包含";",以;分割school_code存放在result中,不修改原串。

  • 相关阅读:
    APIO2007 动物园
    SCOI2010 股票交易
    USACO13NOV No Change G
    洛谷 P3694 邦邦的大合唱站队
    洛谷 P6196 3月月赛 ERR1 代价
    洛谷月赛 ERR1 代价
    Splay 学习笔记
    HNOI2009 梦幻布丁
    乘法逆元
    【洛谷】【二分答案+最短路】P1462 通往奥格瑞玛的道路
  • 原文地址:https://www.cnblogs.com/whuqin/p/4982034.html
Copyright © 2011-2022 走看看