Java日期正则表达式(附Demo)

news2024/11/28 16:33:37

目录

  • 前言
  • 1. 基本知识
  • 2. Demo

前言

对于正则匹配,在项目实战中运用比较广泛

原先写过一版Python相关的:ip和端口号的正则表达式

1. 基本知识

对于日期的正则相对比较简单

以下是一些常见的日期格式及其对应的正则表达式示例:

  • 年-月-日(YYYY-MM-DD):
    正则表达式:\d{4}-\d{2}-\d{2}
    示例:2024-04-11

  • 年/月/日(YYYY/MM/DD):
    正则表达式:\d{4}/\d{2}/\d{2}
    示例:2024/04/11

  • 月/日/年(MM/DD/YYYY):
    正则表达式:\d{2}/\d{2}/\d{4}
    示例:04/11/2024

  • 日/月/年(DD/MM/YYYY):
    正则表达式:\d{2}/\d{2}/\d{4}
    示例:11/04/2024

  • 年月日无分隔符(YYYYMMDD):
    正则表达式:\d{8}
    示例:20240411

2. Demo

由于实战中运用到某些逻辑

假设数据如下:"2024-04-28~2024-05-05"

需要的数据只要后半部分的年月
类似Demo如下:

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class test {
    public static String extractYearMonth(String date) {
        String monthYearPattern = "\\d{4}-(\\d{2})-\\d{2}~(\\d{4})-(\\d{2})-\\d{2}";
        Pattern pattern = Pattern.compile(monthYearPattern);
        Matcher matcher = pattern.matcher(date);

        if (matcher.find()) {
            return matcher.group(2) + "-" + matcher.group(3); // 返回匹配到的年月部分
        } else {
            return null; // 如果没有匹配到,返回 null
        }
    }

    public static void main(String[] args) {
        String weekPlanTime = "2024-04-28~2024-05-05";
        String monthYear = extractYearMonth(weekPlanTime);
        System.out.println(monthYear); // 输出 "04"
    }
}

截图如下:

在这里插入图片描述

补充group的知识点

  • Matcher 类是用于在字符串中执行正则表达式匹配操作的引擎,可以在输入字符串中进行正则表达式的匹配和搜索。- 使用 Matcher 对象执行匹配后,你可以使用 group() 方法来检索匹配的子序列

group() 方法有几种不同的形式,但最常用的是不带参数的形式,返回整个模式匹配的子序列
还可以使用带参数的 group(int group) 方法,返回指定捕获组的匹配子序列
捕获组是用圆括号 () 括起来的正则表达式的一部分,可以在匹配时从输入字符串中提取出来

使用了 matcher.group(2),这表示我们提取了正则表达式模式中的第二个捕获组,也就是结束日期的年份部分

  • matcher.group(1) 代表04
  • matcher.group(2) 代表2024
  • matcher.group(3) 代表05

对于个别日期比较灵活,可以使用这种方式:

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class test {
    public static String extractYearMonth(String date) {
        String monthYearPattern = "\\d{4}-(\\d{1,2})-\\d{1,2}~(\\d{4})-(\\d{1,2})-\\d{1,2}";
        Pattern pattern = Pattern.compile(monthYearPattern);
        Matcher matcher = pattern.matcher(date);

        if (matcher.find()) {
            return matcher.group(2)  + "-" + matcher.group(3) ; // 返回匹配到的年月部分
        } else {
            return null; // 如果没有匹配到,返回 null
        }
    }

    public static void main(String[] args) {
        String weekPlanTime = "2024-4-28~2024-5-5";
        String monthYear = extractYearMonth(weekPlanTime);
        System.out.println(monthYear); // 输出 "04"
    }
}

截图如下:

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1586915.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

ES6 全详解 let 、 const 、解构赋值、剩余运算符、函数默认参数、扩展运算符、箭头函数、新增方法,promise、Set、class等等

目录 ES6概念ECMAScript6简介ECMAScript 和 JavaScript 的关系ES6 与 ECMAScript 2015 的关系 1、let 、 const 、var 区别2、变量解构赋值1、数组解构赋值2、对象解构赋值3、字符串的解构赋值 3、展开剩余运算符1、**展开运算符(...)**2、**剩余运算符(...)** 4、函数的拓展函…

Windows终端添加git bash

环境:windows11 终端:windows terminal git bash默认的界面不太好看,添加到终端会比较好用 步骤 打开 windows terminal,在向下箭头 点击 设置左侧栏 点击 “添加新配置文件”,如下图配置,主要修改项&…

系统开发实训小组作业week7 —— 优化系统开发计划

目录 1. 建立规则,仪式,流程,模式 2. 给好行为正面的反馈 3. 明确指出不合适的行为,必要时调整人员 在 “系统开发实训课程” 中,我们小组的项目是 “电影院会员管理系统” 。在项目的开发过程中,我们遇…

全国口腔经销商大会暨口腔行业交流发展论坛【SDHE相约深圳】

全国口腔经销商大会暨口腔行业交流与发展论坛【SDHE相约深圳】 一、活动介绍与宗旨 1.主题:规范 共享 赋能 融合 2.时间和地址 :2024年12月 5日 深圳国际会展中心(宝安) 3.宗旨 促进口腔产业链的优化与升级,推动口…

ETL中如何运用好MQ消息集成

一、ETL的主要作用 ETL(Extract, Transform, Load)是数据仓库中的关键环节,其主要作用是将数据从源系统中抽取出来,经过转换和清洗后加载到数据仓库中。具体而言: Extract(抽取):从…

跟着Carl大佬学leetcode之27 移除元素

来点强调,刷题是按照代码随想录的顺序进行的,链接如下https://www.programmercarl.com/本系列是记录一些刷题心得和学习过程,就看到题目自己先上手试试,然后看程序员Carl大佬的解释,自己再敲一遍修修补补,练…

套接字通信模型

本文内容主要参考《Android图形显示系统》 套接字也就是socket,一般用于网络中两个主机之间应用进程进行通信,在同一个主机也可以使用套接字完成进程之间的通信。 在图形显示系统中,用到套接字进行通信的地方主要有VSync信号的分发以及输入事…

Freemarker 的配置

Freemarker是一种用于生成动态模板的Java模板引擎。它可以将数据与模板文件结合,生成最终的输出内容。以下是使用Freemarker的实现和配置步骤: 引入Freemarker库:首先需要将Freemarker库添加到项目的依赖中。可以通过在Maven或Gradle中添加相…

idea: 没有 new java class

如图: 解决: 右键点击--> Mark Directory as --> Sources Root ok

简单问题之字符类总结

2023 考点:字符串string的用法 可参考这篇文章 思路: 常用函数: string s; getline(cin,s);//一行读入字符功能 string s3s1s2;//字符串的拼接 子串简写 思路: 对于字符串问题先考虑用暴力(双指针)是否能…

【Qt】事件

目录 一、介绍 二、进入离开事件 三、鼠标事件 3.1 鼠标单击事件 3.2 鼠标释放事件 3.3 鼠标双击事件 3.4 鼠标移动事件 3.5 滚轮事件 四、按键事件 4.1 单个按键 4.2 组合按键 五、定时器 5.1 QTimerEvent类 5.2 QTimer类 5.3 获取系统日期及时间 六、窗口移…

20 Games101 - 笔记 - 光场、颜色与感知

**20 ** 光场、颜色与感知 光场 眼睛成像 眼睛成像:我们看到这个三维世界,在眼睛里类似就是一幅二维的图。如果直接看到一幅记录了看到的光线信息的图,也能得到同样效果(虚拟现实)。 全光函数 全光函数可以描述…

基因组组装:Hifiasm 使用教程

简介 Hifiasm[1] 是一个快速的单倍型解析 de novo 组装软件,最初设计用于 PacBio HiFi 读取。其最新版本可以通过利用超长的 Oxford Nanopore 读取支持端粒到端粒的组装。Hifiasm 可以生成单样本端粒到端粒的组装,结合了 HiFi、超长和 Hi-C 读取&#xf…

【示例】MySQL-4类SQL语言-DDL-DML-DQL-DCL

前言 本文主要讲述MySQL中4中SQL语言的使用及各自特点。 SQL语言总共分四类:DDL、DML、DQL、DCL。 SQL-DDL | Data Definition Language 数据定义语言:用来定义/更改数据库对象(数据库、表、字段) 用途 | 操作数据库 # 查询所…

Linux开发--进程

经典五问: 1.什么是程序?什么是进程? 从是否运行进行判断: gcc xxx -o pro,磁盘中生成的pro文件,就是程序 进程是程序一次运行活动 程序是静态的概念,进程是动态的概念。 2.如何查看系统中的进程: 在l…

无重复字符串的最长子串

题目描述:给定一个字符串 s ,请你找出其中不含有重复字符的 最长子串的长度。 第一次提交记录 class Solution:def lengthOfLongestSubstring(self, s: str) -> int:if not s:return 0lookup set()left res 0for right in range(len(s)):while s…

2024年人工智能路线图

今天分享的是人工智能专题系列深度研究报告:《人工智能专题:2024年人工智能路线图》。 秘书制定部门的人工智能战略优先事项和政策,并且是关键的对话者与私营部门、联邦机构、州官员,以及主要的国际同行。这部长在白宫人力资源委员…

MindSQL

文章目录 关于 MindSQL安装代码调用📁 项目代码结构其它 关于 MindSQL MindSQL 是一个 Python RAG 库,旨在仅使用几行代码来简化用户与其数据库之间的交互。 MindSQL 与 PostgreSQL、MySQL、SQLite 等知名数据库无缝集成,还通过扩展接口将其…

基于ssm的前后端分离鲜花销售系统论文

摘 要 现代经济快节奏发展以及不断完善升级的信息化技术,让传统数据信息的管理升级为软件存储,归纳,集中处理数据信息的管理方式。本鲜花销售系统就是在这样的大环境下诞生,其可以帮助管理者在短时间内处理完毕庞大的数据信息&am…

async+await——用法——基础积累

对于asyncawait,我一直都不太会用。。。。 今天记录一下asyncawait的实际用法: 下面是一个实际的使用场景: 上面的代码如下: async fnConfirmCR(){let type this.crType;let crId this.crId;if(typeof crId object){let ne…