前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >正则表达式经典应用

正则表达式经典应用

作者头像
程序员小熊
发布2022-05-17 11:44:46
2960
发布2022-05-17 11:44:46
举报

前言

大家好,我是熊哥。在项目开发中,经常会用到正则表达式,它在检索、替换符合某个模式(规则)的文本中起到举足轻重的作用。

本文以两个例子来介绍 Java 中,常用到的正则表达式,供大家参考,希望对大家有所帮助。

判断输入的时间是否符合格式要求一

代码语言:javascript
复制
判断用户输入的时间的格式(非区间内)是否符合要求。

要求:
1、时间是 24 小时制;
2、时间的格式是:xx:xx:xx;
3、当分秒不足 10 时,前面补 0;
4、冒号是英文格式,且冒号与数字之间不能有空格

示例:
输入:str = "8:2:30"
输出:false
解释:因为 2 < 10,所以应当输入 02 而不是 2,
同时冒号为英文格式。

思路

时间是 24 小时制,当分秒不足 10 时,前面补 0

如果时钟小于 20,则时钟的第二位只能是 0~9,例如:下午三点就写成 15;

如果时钟不小于 20,则时钟的第二位只能是 0~3,例如:晚上十点就写成 22;

对于分钟和秒钟第一、二位分别只能是 0~5 和 0~9,例如:四十五分二十一秒就写成 45:21,八分两秒应写成 08:02。

正则表达式

代码语言:javascript
复制
"([01]?[0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]"

解释:
([01]?[0-9]|2[0-3]):如果时钟是 0 或 1 开头,
则时钟的第二位只能是 0~9;
否则时钟的第二位是 0~3;

[0-5][0-9]:分钟或者秒钟以 0~5 开头,
第二位只能是 0~9。

Show me the Code

Java

代码语言:javascript
复制
public static boolean isValidTime(String str) {
    String format = "([01]?[0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]";
    Pattern pattern = Pattern.compile(format);
    Matcher matcher = pattern.matcher(str);
    if (matcher.matches()) {
        return true;
    }
    return false;
}

判断输入的时间是否符合格式要求二

代码语言:javascript
复制
判断用户输入的时间的格式(区间外)是否符合要求。

要求:
1、同上面例一的要求;
2、两个时间之间有英文逗号且不能有空格;
3、中括号是英文版的。

示例:
输入:str = "[8:20:30,12:32:5]"
输出:false
解释:因为 5 < 10,所以应当输入 05 而不是 5,
同时冒号为英文格式。

思路

  1. 判断格式是否是以左中括号打头,以右中括号结尾,即是否满足[];
  2. 若 1 满足后,提取中括号中的字符串;
  3. 将中括号中的字符串按照逗号进行切分;
  4. 判断每个被切分的部分是否满足要求

正则表达式

代码语言:javascript
复制
"(\\[(.*?)])":判断格式是否是 [];
"\\[(.*?)]":提取中括号中的字符;
split(","):按照逗号对字符串进行切分;
"([01]?[0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]":判断被切分的部分是否满足要求。

Show me the Code

Java

代码语言:javascript
复制
public static boolean isValidTimeInside(String str) {
    String format = "(\\[(.*?)])";

    // 匹配字符串的格式是否是英文版的[]
    Pattern pattern = Pattern.compile(format);
    Matcher matcher = pattern.matcher(str);
    while (matcher.find()) {
        // 获取 [] 中的内容
        String regex = "\\[(.*?)]";
        Pattern compile = Pattern.compile(regex);
        Matcher matcher1 = compile.matcher(str);
        while (matcher1.find()) {
            // 将 [] 中文内容按逗号切分 
            String[] strings = matcher1.group(1).split(",");
            for (String string : strings) {
                // 判断切分后的每部分是否满足要求
                if (!isValidTime(string)) {
                    return false;
                }
            }
        }
        return true;
    }
    return false;
}
本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2022-04-24,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 程序员小熊 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
  • 判断输入的时间是否符合格式要求一
  • 思路
  • 正则表达式
  • Show me the Code
  • 判断输入的时间是否符合格式要求二
  • 思路
  • 正则表达式
  • Show me the Code
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档