• BOOST学习:BOOST_FOREACH+boost::assign处理正则表达式(特殊字符$需要单独处理)


    最近一段时间过于堕落,沉迷小说游戏,无心学习。今天正好是人生新开始,把工作中用到的知识总结一下。由于本身学习了C++11,14,17,20.但公司的平台采用的技术是C++11。而且还不完整,这时候正是体现学习新特性的好处。同时正则表达式平常没怎么使用,顺便记录一下。

    由于编译器版本的问题,博主采用的是vs2010版本,只支持部分的C++11功能。所以boost库在这一方面体现出了优势。

    1.for循环的使用

    本编译器版本的C++11不支持 for(const auto& var:vec)

    可以采用BOOST_FOREACH(auto var,vec)

    2.boost::assign循环的使用

    本编译器版本的C++不支持 初始化列表构造

    可以采用boost::assign

    通过输入的字符串进行字符转换

    就是输入带有特殊字符串的$h,然后将$h变成字符串匹配进行转换,但是正则表达式对特殊字符串需要转义,就是变成\\$h,正则表达式才能转换。

    比如字符串为(A为原字符串,B为转换字符串,C为要转换的字符串)

    A: hd$hua&hd$hd$xx

    B: $h
    C:test

    最终效果:hdtestua&hdtestd$xx

    代码如下:(其中正则表达式的特殊字符需要进行转义,$字符比较特别,需要进行单独处理,regex对特殊字符判断需要转义,不然会报错)

    1. string& replace_all_distinct(string& str, const string& oldStr, const string& newStr)
    2. {
    3. for (string::size_type pos(0); pos != string::npos; pos += newStr.length())
    4. {
    5. if ((pos = str.find(oldStr, pos)) != string::npos)
    6. {
    7. str.replace(pos, oldStr.length(), newStr);
    8. }
    9. else
    10. {
    11. break;
    12. }
    13. }
    14. return str;
    15. }
    16. //处理正则表达式中的特殊字符
    17. void DealwithRegexSpecialChar(string& str)
    18. {
    19. string A = "hd$hua&hd$hd$xx";
    20. string B = "$h";
    21. string C = "test";
    22. //优先处理转义字符'\',防止其他先转义后带\\,再进行转义出问题
    23. using namespace boost::assign;
    24. vector<string> vec;
    25. vec += "\\\\", "\\.", "\\^", "\\(", "\\)", "\\*",
    26. "\\+", "\\?", "\\{", "\\}", "\\[", "\\]", "\\|";
    27. BOOST_FOREACH(const auto & var, vec)
    28. {
    29. regex re(var);
    30. B = regex_replace(B, re, var);
    31. }
    32. string oldStr = "$";
    33. string newStr = "\\$";
    34. replace_all_distinct(B, oldStr, newStr);
    35. //将B作为正则表达式
    36. regex re(B);
    37. A = regex_replace(A, re, C);
    38. int a = 10;
    39. }

    最终效果:

     

  • 相关阅读:
    【Linux基础】详谈Shell运行原理------王婆传媒(高重复率面试题)
    网络设置有效性检测之C#设计笔记(十七)
    网上商城项目(加入购物车)
    突破编程_C++_设计模式(解释器模式)
    TikTok营销攻略:如何精准测试与优化品牌营销策略
    Filter(过滤器)Intercerptor(拦截器)
    腾讯程序员的手码K8S+Jenkins笔记
    去除重复字母(不同字符的最小序列)问题
    前端技能树,面试复习第 50 天—— Vue3.0 基础 | Vue3 有什么更新 | Composition API
    Python自动化测试框架之unittest使用详解!
  • 原文地址:https://blog.csdn.net/qq_38409301/article/details/126448539