前言
大家好,我是熊哥。在项目开发中,经常会用到正则表达式,它在检索、替换符合某个模式(规则)的文本中起到举足轻重的作用。
本文以两个例子来介绍 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 满足后,提取中括号中的字符串;
- 将中括号中的字符串按照逗号进行切分;
- 判断每个被切分的部分是否满足要求
正则表达式
代码语言: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;
}