当前位置: 首页 > article >正文

正则表达式用于报文中日期时间的编程查找

报文中日志的日期时间格式各种各样,如何提取出正确的日期,考虑使用正则表达式,这样以后即使有新的格式,只要修改表达式即可,而不需要重新编程进行字符串查找。

学习正则表达式的编程知识:C++使用正则匹配

先确认写的正则表达式是否正确,通过以下网站进行在线验证:
正则表达式在线验证
输入表达式:\d{4}[/]\d{2}[/]\d{2}[ ]\d{2}[:]\d{2}[:]\d{2}[.]\d{3}|\d{4}[/]\d{2}[/]\d{2}[ ]\d{2}[:]\d{2}[:]\d{2}|\d{4}[-]\d{2}[-]\d{2}[ ]\d{2}[:]\d{2}[:]\d{2}[.]\d{3}|\d{4}[-]\d{2}[-]\d{2}[ ]\d{2}[:]\d{2}[:]\d{2}
这里用到了四个条件,用|或起来,
再输入需要验证的报文:

104M_DIAG_1>2023/05/09 10:14:27.249[重要]:<<-- 68 FA 08 00 2023/05/09 10:14:27 00 3F 40 00 33 33 A7 41 00 40 40 00 33 33 A7 41 00 41 40 00 33 33 A7 41 00 42 40 00 33 33 A7 41 00 43 40 00 33 33 A7 41 00 44 40 00 33 33 A7 41 00 45 40 00 33 33 A7 41 00 46 40 00 33 33 A7 41 00 47 40 00 33 33 A7 41 00 48 40 00 33 33 A7 41 00 49 40 00 33 33 A7 41 00 4A 40 00 33 33 A7 41 00 4B 40 00 33 33 A7 41 00 4C 40 00 48 E1 A4 41 00 4D 40 00 33 33 A7 41 00 4E 40 00 33 33 A7 41 00 4F 40 00 33 33 A7 41 00 50 40 00 33 33 A7 41 00 51 40 00 33 33 A7 41 00 52 40 00 33 33 A7 41 00 53 402023-05-09 10:14:27 00 33 33 A7 41 2023-05-09 10:14:27.001 54 40 00 33 33 A7 41 00 55 40 00 33 33 A7 41 00 56 40 00 33 33 A7 41 00 57 40 00 33 33 A7 41 00 58 40 00 D7 A3 A4 41 00 59 40 00 33 33 A7 41 00 5A 40 00 33 33 A7 41 00 5B 40 00 33 33 A7 41 00 5C 40 00 33 33 A7 41 00
···
验证结果:
![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/57e83539e28f498fb88567b8332fe652.png)
下面开始编程:
smatch result;
string::const_iterator iter_begin = s.cbegin();
string::const_iterator iter_end = s.cend();
while (regex_search(iter_begin, iter_end, result, pattern))
{
cout << "查找成功:" << result[0] << endl;
cout << "查找结果子串的在源串中的迭代器位置" << *result[0].first << endl;
cout << "查找结果子串的在源串后面的位置" << *result[0].second << endl;
iter_begin = result[0].second;    //更新迭代器位置
}
return 0;
}

测试代码通过。这个可以查找字符串中所有符合条件的,我只需要第一个就行了
即result[0]
注意表达式,\d要换成\d
优化后的正则表达式:
(\d{4}[/|-]\d{2}[/|-]\d{2}[ ]\d{2}[:]\d{2}[:]\d{2}.(\d{6}|\d{3}))|(\d{4}[/|-]\d{2}[/|-]\d{2}[ ]\d{2}[:]\d{2}[:]\d{2})
适合如下格式:
2023/05/09 10:14:27.249
2024/06/09 10:14:28
2023-06-10 11:14:27.349
2024-05-09 10:15:27
2023-04-27 15:36:07.123456


http://www.kler.cn/a/410324.html

相关文章:

  • 洛谷 B3635 硬币问题 C语言 记忆化搜索
  • C++设计模式行为模式———状态模式
  • Burp入门(1)
  • 【linux学习指南】初识Linux进程信号与使用
  • javaEE初阶——多线程(1)
  • 详细探索xinput1_3.dll:功能、问题与xinput1_3.dll丢失的解决方案
  • MySQL索引优化与Java应用实践
  • OEM sql monitoring 类似SQL
  • 使用Ansible/SaltStack编写自动化运维脚本
  • 嵌套结构与树结构系列--1.三目运算与二叉树
  • ensp动态路由OSPF实验
  • java笔试练习题笔记(15)
  • 正则表达式灾难:重新认识“KISS原则”的意义
  • Docker 的优势和劣势分别是什么
  • 构建 Java Web 应用程序:从 Servlet 到数据库交互(Eclipse使用JDBC连接Mysql数据库)
  • mysql之常用的命令行操作
  • MySQL45讲 第29讲 如何判断一个数据库是不是出问题了?——阅读总结
  • 簡單易懂:如何在Windows系統中修改IP地址?
  • windows实战-wordpress——玄机靶场
  • 在C++上实现反射用法
  • ISUP协议视频平台EasyCVR萤石设备视频接入平台银行营业网点安全防范系统解决方案
  • 详解 【AVL树】
  • DICOM图像深入解析:为何部分DR/CR图像默认显示为反色?
  • 【案例学习】如何使用Minitab实现包装过程的自动化和改进
  • Failed to find SV in PRN block of SINEX file (Name svnav.dat)
  • Linux系统使用valgrind分析C++程序内存资源使用情况