做软件免不了和各种开放的私有的协议打交道,有的时候遇到不走寻常路的protocol,那就真的不能走寻常路了,勇敢的掏出利器,让领导哭吧^_^

言归正传,一个Kuwait项目中,client和server之间个性化的定义了一个协议,协议版本还是DRAFT的,大家就开工了,除了做client,boss还希望做一个模拟的server,这样调试方便。难点是,协议基于二进制数据流,数据流中可选域很多,不同类型的报文之间,没有明显的规律可循,并且client发给server的报文,比server反馈的报文复杂很多(俺摊上做server,解析client报文,oh 那个 my~...)

好消息是手里有基于VC6的一个模拟server,处理其他协议的,除了协议部分,其它的内容可以借用,比如tcp和串口通信、主要的UI等等。啃文档、人工解析报文后发现,顺序解析起来要考虑的事情太多,头部向后解析一些,尾部向前解析一些,剩下的中间部分再解析一下,这样似乎比较容易,正所谓掐头去尾留中间,转念一想,这不正是正则表达式的强项么,VC环境,想不到boost都难,于是乎剩下的事情都比较顺其自然了,一次美好的MFC+boost的体验。

限于是公司项目,就不能上实例了,大概的思路

(1)VC6配置boost lib,拜google

(2)boost + stl string试验,拜google + conding

(3)人工解析的报文,换用boost regex解析测试

(4)交工,功能可以,维护性不好说

摘录几个用到的regex,留个念想

(第1个是解析一种类型报文的,后面3个和在一起解析另外一种报文,其它报文类似)

std::string str_recon =         "^(\\d{1})(\\d{8})(\\d{4})([0-9A-F]{4})([\\x20-\\x7a]{2})(\\d{1,15})(\\|)(\\|)(\\|)(\\|)(\\d)(\\d)(\\|)(\\d{1,11})(\\|)(\\d{1,4})(\\|)(\\d{1,11})(\\|)(\\d{1,4})(\\|)([0-9A-F]{8})";std::string str_et =         "^(\\d{1})(\\d{8})(\\d{4})([0-9A-F]{4})([\\x20-\\x7a]{2})(\\d{1,15})(\\|)([\\x20-\\x7a~]{1,40})(\\|)(\\d{1,11})(\\|)([\\x20-\\x7a~]{0,16})(\\|)(\\d)(\\d)()(\\|)(\\d{0,15})(.*)(\\|)((?:)|[\\x20-\\x7a]{27}|[\\x20-\\x7a]{33})(\\|?)((?:)|[0-9A-F]{16})([0-9A-F]{8})$";std::string str_et_ic =       "^(\\|?)(\\d{10})(\\|)(\\d{2})(\\|)(\\d{3})(\\|)(\\d{3})(\\|)(\\d{2})(\\|)(.*)$";std::string str_et_ic_29f = "^([\\x20-\\x7a]{16})([\\x20-\\x7a]{4})([\\x20-\\x7a]{4})([\\x20-\\x7a]{8})([\\x20-\\x7a]{10})(\\d{2})([\\x20-\\x7a]{1,64})(~?)([\\x20-\\x7a]{0,32})(~?)((?:)|[\\x20-\\x7a]{4})(~?)((?:)|[\\x20-\\x7a]{2})(~?)((?:)|[\\x20-\\x7a]{6})(~?)((?:)|[\\x20-\\x7a]{4})(~?)((?:)|[\\x20-\\x7a]{0,30})$";

道高一尺魔高一丈,记强大的boost regex相关推荐

  1. C++中三种正则表达式比较(C regex,C ++regex,boost regex)

    原文地址:https://www.cnblogs.com/pmars/archive/2012/10/24/2736831.html 工作需要用到C++中的正则表达式,所以就研究了以上三种正则. 1, ...

  2. 如何让开源多点成功的几率;开源和 COVID-19: 道高一尺魔高一丈;等开源之道每周评论2020 04 07...

    ▼ 更多精彩推荐,请关注我们 ▼ 声明:本文所言论,仅代表适兕个人观点 文章评论 避免边缘化:开源软件如何成功? 原文链接:Avoiding the ragged edge: How open-sou ...

  3. boost::regex模块实现以编程方式生成代码片段,以便剪切并粘贴到正则表达式源中测试程序

    boost::regex模块实现以编程方式生成代码片段,以便剪切并粘贴到正则表达式源中测试程序 实现功能 C++实现代码 实现功能 boost::regex模块实现以编程方式生成代码片段,以便剪切并粘 ...

  4. boost::regex模块用于测试特定于语言环境的表达式的帮助程序类

    boost::regex模块用于测试特定于语言环境的表达式的帮助程序类 实现功能 C++实现代码 实现功能 boost::regex模块用于测试特定于语言环境的表达式的帮助程序类 C++实现代码 #i ...

  5. boost::regex模块通用对象缓存的测试代码

    boost::regex模块通用对象缓存的测试代码 实现功能 C++实现代码 实现功能 boost::regex模块通用对象缓存的测试代码 C++实现代码 #include <boost/reg ...

  6. boost::regex模块实现config_info 来打印正则表达式库配置信息的测试程序

    boost::regex模块实现config_info 来打印正则表达式库配置信息的测试程序 实现功能 C++实现代码 实现功能 boost::regex模块实现config_info 来打印正则表达 ...

  7. boost::regex模块实现吐出链接的 URL的测试程序

    boost::regex模块实现吐出链接的 URL的测试程序 实现功能 C++实现代码 实现功能 boost::regex模块实现吐出链接的 URL的测试程序 C++实现代码 #include < ...

  8. boost::regex模块将字符串拆分为标记的测试程序

    boost::regex模块将字符串拆分为标记的测试程序 实现功能 C++实现代码 实现功能 boost::regex模块将字符串拆分为标记的测试程序 C++实现代码 #include <boo ...

  9. boost::regex模块实现将 C++ 文件转换为语法突出显示的 HTML的测试程序

    boost::regex模块实现将 C++ 文件转换为语法突出显示的 HTML的测试程序 实现功能 C++实现代码 实现功能 boost::regex模块实现将 C++ 文件转换为语法突出显示的 HT ...

最新文章

  1. MongoDB入门学习(二):MongoDB的基本概念和数据类型
  2. mysql慕课网笔记_mysql学习笔记
  3. Android源码-Logger日志系统
  4. 一个简易的数字输入框组件
  5. azure云数据库_在Azure SQL数据库中保护数据的五种方法
  6. django进阶05中间件
  7. 实验5.5 定义一个Employee类
  8. Linux meson + ninja编译安装源码(八)
  9. SpringBoot中级篇-SpringBatch+Oracle配置
  10. 181221每日一句
  11. 字符串常量池(StringTable)总结
  12. STL源码剖析 第5章 关联式容器
  13. php 随机经纬度,随机像mariadb插入10万数据,包括经纬度以及调用百度map API获取...
  14. 联想m7216更换墨粉流程图_联想M7216打印机加墨粉后还显示墨粉用完是为什么?...
  15. TX2 开机自动启动程序
  16. SRM 459 500p hust1080 NumberPyramids
  17. 企业数据防泄漏解决方案分享
  18. Java爬去教务系统后怎么发布_GitHub - canliture/CrawlerCourseTable: 课程表的java爬虫实现--基于“强智教务系统”...
  19. 物联网通信技术第7章 自组织网络(非常全,持续更新)
  20. 《白帽子讲Web安全》memo0

热门文章

  1. 最大的计算机计数单位,计数单位最大只知道亿?也许更大的计数单位能让你笑出声。...
  2. 工作流任务调度系统:Apache DolphinScheduler
  3. office2016 无法启动服务,原因可能是已被禁用或与其相关联的设备没有启动
  4. 对Word文档中的指定内容进行替换
  5. 360网站卫士php-dos,360网站卫士的CDN缓存加速功能详解
  6. Automatically assigning platform `iOS` with version `8.0` on target `Runner`
  7. .NET定位CPU使用率过高问题
  8. 微信朋友圈信息流可能采用算法排序吗?
  9. 抖音直播带货gmv是什么意思?丨国仁网络资讯
  10. Excel按相同列内容合并表