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

目录

  • 前言
  • [1. 基本知识](#1. 基本知识)
  • [2. Demo](#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如下:

java 复制代码
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

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

java 复制代码
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"
    }
}

截图如下:

相关推荐
醇氧14 分钟前
【Windows】从守护到终结:解析一个 Java 服务的优雅停止脚本
java·开发语言·windows
努力发光的程序员14 分钟前
互联网大厂Java求职面试实录
java·jvm·线程池·多线程·hashmap·juc·arraylist
小鹿学程序18 分钟前
FileZilla连接到虚拟机
java·服务器·开发语言
Haooog25 分钟前
Docker面试题(不定时更新)
java·docker·面试
feathered-feathered34 分钟前
Redis基础知识+RDB+AOF(面试)
java·数据库·redis·分布式·后端·中间件·面试
毕设源码-赖学姐36 分钟前
【开题答辩全过程】以 高校排课系统的优化设计与实现为例,包含答辩的问题和答案
java·eclipse
q_191328469537 分钟前
基于SpringBoot2+Vue2的行业知识答题考试系统
java·vue.js·spring boot·mysql·毕业设计·计算机毕业设计·演示文稿
上78将37 分钟前
Java中既有编译执行又有解释执行,这个怎么理解?
java·开发语言
Mr_Xuhhh40 分钟前
JAVA期末重点
java·开发语言·python
a程序小傲1 小时前
小红书Java面试被问:java创建对象有哪些方式?
java·开发语言·面试