【Java】正则表达式基础题+场景题练习

基础语法可以看我另一篇博客:正则表达式【规则】【实例】【技巧】_正则规则-CSDN博客

输出结果全是true

java 复制代码
public class StringRegexTest {
    public static void main(String[] args) {
        System.out.println(matchSingleNum("1"));
        System.out.println(matchMultiNum("123"));
        System.out.println(matchSingleLetter("a"));
        System.out.println(matchMultiLetter("abc"));
        System.out.println(matchLetterOrNum("abc123abc"));
        System.out.println(matchAppointLength("abc12abc", 8));
        System.out.println(matchEmail("1423sdaf23@16sdf.com"));
        System.out.println(matchURL("https://blog.csdn.net/lklalmq/article/details/136012146?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522bb9e340f647a3193fa75a3234c345784%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fblog.%2522%257D&request_id=bb9e340f647a3193fa75a3234c345784&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~blog~first_rank_ecpm_v1~rank_v31_ecpm-1-136012146-null-null.nonecase&utm_term=%E6%AD%A3%E5%88%99&spm=1018.2226.3001.4450"));
        System.out.println(matchEmpty(" "));
        System.out.println(matchNotEmpty("是"));
        System.out.println(matchStart("Hello World", "Hello"));
        System.out.println(matchEnd("Hello World", "World"));
        System.out.println(matchContains("Hello World", "o W"));
        System.out.println(matchContainsIgnoreCase("Hello World", "O w"));
        System.out.println(matchPhone("13232323232"));
        System.out.println(matchDateTime("2024-01-01 12:00:00"));
        System.out.println(matchLocalDateTime(LocalDateTime.now().toString()));
        System.out.println(matchRgbColor("#F02EAF"));
        System.out.println(matchNotContains("123abc123ab123", "4"));
        System.out.println(matchRepeat("abbc"));
        System.out.println(matchMid("Hello World", "llo"));
        System.out.println(matchWord("&%d break 23"));
        System.out.println(matchOptional("Hello World", "World"));
        System.out.println(matchIdCard("332613202302291982"));
        System.out.println(matchWeakPassword("qwe123"));
        System.out.println(matchMidPassword("qweASD123"));
        System.out.println(matchStrongPassword("^&*daf123*&Ss"));
        System.out.println(matchFileName("application.properties"));
        System.out.println(matchIPv4("000.000.000.000"));
        System.out.println(matchChinese("黄小桃"));
    }

    // 匹配一个数字
    public static Boolean matchSingleNum(String str){
        String regex = "\\d";
        return str.matches(regex);
    }
    // 匹配多个连续数字
    public static Boolean matchMultiNum(String str){
        String regex = "\\d+";
        return str.matches(regex);
    }
    // 匹配一个字母,不区分大小写
    public static Boolean matchSingleLetter(String str){
        String regex = "[a-zA-Z]";
        return str.matches(regex);
    }
    // 匹配多个字母,不区分大小写
    public static Boolean matchMultiLetter(String str){
        String regex = "[a-zA-Z]+";
        return str.matches(regex);
    }
    // 匹配多个字母或数字
    public static Boolean matchLetterOrNum(String str){
        String regex = "[a-zA-Z0-9]+";
        return str.matches(regex);
    }
    // 匹配特定长度的字符串
    public static Boolean matchAppointLength(String str, int length){
        String regex = ".{" + length + "}";
        return str.matches(regex);
    }
    // 匹配基本的邮箱地址
    // 邮箱的格式:用户名@域名
    // 用户名:一般6-18位,由大小写字母、数字、下划线、点、加减号、百分号组成
    // 二级域名:至少1位,由大小写字母、数字、点、连字符组成
    // 顶级域名:至少2位,由大小写字符组成,当然也有很多新的顶级域名可以是数字
    public static Boolean matchEmail(String str){
        String regex = "[\\w.%+-]{6,18}@[a-zA-Z0-9.-]+\\.[a-zA-Z0-9]{2,}";
        return str.matches(regex);
    }
    // 匹配URL
    // URL的格式:协议://域名/路径?参数
    // 协议:http或https
    // 二级域名:至少1位,由大小写字母、数字、点、连字符组成
    // 顶级域名:至少两位,由大小写字符、数字组成
    // 路径:可选,以 / 开头,由除了\n之外的任意字符组成,也可能位空
    // 参数:可选,以 ? 开头,由大小写字母、数字、+-._%&=组成,也可能为空
    // 注意:正则表达式中,\n是匹配换行符的,所以在路径中不能出现\n\r\f等空白字符
    public static Boolean matchURL(String str){
        String regex = "(http://|https://)[a-zA-Z0-9.-]+\\.[a-zA-Z0-9]{2,}(/.*)*(\\?[\\w.%&+-=]*)?";
        return str.matches(regex);
    }
    // 匹配一个空白字符,包括空格、制表符、换行符、回车符、换页符等
    public static Boolean matchEmpty(String str){
        String regex = "[\\x20\\t\\n\\r\\f]";
        return str.matches(regex);
    }
    // 匹配非空字符
    public static Boolean matchNotEmpty(String str){
        String regex = "[^\\s]"; // 或者\\S
        return str.matches(regex);
    }
    // 匹配字符串开头
    public static Boolean matchStart(String str, String start){
        String regex = "^" + start + ".*";
        return str.matches(regex);
    }
    // 匹配字符串结尾
    public static Boolean matchEnd(String str, String end){
        String regex = ".*" + end + "$";
        return str.matches(regex);
    }
    // 匹配包含特定子串
    public static Boolean matchContains(String str, String mid){
        String regex = ".*" + mid + ".*";
        return str.matches(regex);
    }
    // 匹配包含特定子串,不区分大小写
    // (?i) 标志,表示忽略大小写,需要配合Pattern类、Matcher类使用
    public static Boolean matchContainsIgnoreCase(String str, String mid){
        String regex = "(?i).*" + mid + ".*";
        Pattern pattern = Pattern.compile(regex);
        Matcher matcher = pattern.matcher(str);
        return matcher.find();
    }
    // 匹配电话号码
    // 御三家电话号码的格式:1XX-XXXX- XXXX
    // 分为三段,第一段的前三位是网络识别号,以1开头,第二位3 - 9
    // 第二段是四位地区编号,第三段是四位用户号码
    public static Boolean matchPhone(String str){
        String regex = "1[3-9]\\d{9}";
        return str.matches(regex);
    }
    // 匹配日期时间
    // 日期时间的格式:YYYY-MM-DD HH:MM:SS
    public static Boolean matchDateTime(String str){
        String regex = "\\d{4}-\\d{2}-\\d{2} \\d{2}:\\d{2}:\\d{2}";
        return str.matches(regex);
    }
    // 匹配java的LocalDateTime.now().toString()生成的时间字符串
    // 格式:YYYY-MM-DDTHH:mm:ss.SSS
    public static Boolean matchLocalDateTime(String str){
        String regex = "\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}.\\d{3}";
        return str.matches(regex);
    }
    // 匹配十六进制RGB格式颜色
    // 格式:#RRGGBB 或 #RGB
    public static Boolean matchRgbColor(String str){
        String regex = "#([a-fA-F0-9]{6}|[a-fA-F0-9]{3})";
        return str.matches(regex);
    }
    // 匹配不包含特定字符的字符串
    public static Boolean matchNotContains(String str, String notContains){
        String regex = ".*(?!" + notContains + ")*.*";
        return str.matches(regex);
    }
    // 匹配重复两次的字符
    public static Boolean matchRepeat(String str){
        String regex = ".*(.)\\1.*";
        return str.matches(regex);
    }
    // 匹配字符中间的字符,不包括首尾
    public static Boolean matchMid(String str, String mid){
        String regex = ".+" + mid + ".+";
        return str.matches(regex);
    }
    // 匹配一个单词
    public static Boolean matchWord(String str){
        String regex = ".*\\b[a-zA-Z]+\\b.*";
        return str.matches(regex);
    }
    // 匹配以特定字符开头和结尾的字符串
    public static Boolean matchStartAndEnd(String str, String start, String end){
        String regex = Pattern.quote(start) + ".*" + Pattern.quote(end);
        return str.matches(regex);
    }
    // 匹配可选字符
    public static Boolean matchOptional(String str, String optional){
        String regex = "Hello " + "(" + optional + ")?"; // 或者 "Hello(?:" + optional + ")"
        return str.matches(regex);
    }
    // 匹配身份证号
    // 格式:地址码6位 + 出生日期8位 + 顺序码3位 + 校验码1位
    // 地址码:省份代码2位 + 城市代码2位 + 区县代码2位
    // 顺序码:区分同一天内出生的人,奇数代表男性,偶数代表女性
    // 校验码:根据前17位通过特定算法计算得到,校验身份证号的正确性
    // 首位不能为0,二代身份证号18位是从1999年10月1号开始的,一代更早,15位
    // 不考虑平年闰年导致的2月份28天还是29天的问题
    public static Boolean matchIdCard(String str){
        String regex = "[1-9]\\d{5}(19|20)\\d{2}((0[13456789]|1[0-2])(0[1-9]|[12]\\d|30|31)|(02(0[1-9]|1\\d|2[0-9])))\\d{3}[\\dXx]";
        return str.matches(regex);
    }
    // 匹配银行卡号
    public static Boolean matchBankCard(String str){
        String regex = "\\d{13,19}";
        return str.matches(regex);
    }
    // 匹配弱密码
    // 长度 < 8,只包含数字,纯小写或者纯大写字母
    public static Boolean matchWeakPassword(String str){
        String regex = "[a-z0-9]|[a-z0-9]{0,7}";
        return str.matches(regex);
    }

    // 匹配中等密码
    // 长度 >= 8,至少包含一个大写字母、一个小写字母,一个数字
    public static Boolean matchMidPassword(String str){
        String regex = "(?=.*[A-Z])(?=.*[a-z])(?=.*\\d)[a-zA-Z0-9]{8,}";
        return str.matches(regex);
    }

    // 匹配强密码
    // 长度 >= 8, 至少包含一个大写字母,一个小写字母,一个数字,一个特殊字符
    public static Boolean matchStrongPassword(String str){
        String regex = "(?=.*[a-z])(?=.*[A-Z])(?=.*\\d)(?=.*[!@#$%^&*()\\-+_=])[A-Za-z\\d!@#$%^&*()\\-+_=]{8,}";
        return str.matches(regex);
    }

    // 匹配XML、JSON、YAML、HTML、CSS、JS、Properties等文件名
    // 格式:文件名.后缀名
    // 文件名:不能包含\ / : * ? " < > |
    public static Boolean matchFileName(String str){
        String regex = "[^\\/:*?\"<>|]+\\.[a-zA-Z0-9]+";
        return str.matches(regex);
    }
    // 匹配IPv4地址
    // 格式:0.0.0.0 - 255.255.255.255
    // 如果格式为 000.000.000.000,- 255.255.255.255
    // 则regex应该这么写:
    // (25[0-5]|2[0-4][0-9]|[0-1]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[0-1]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[0-1]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[0-1]?[0-9][0-9]?)
    public static Boolean matchIPv4(String str){
        String regex = "([0-1]?[0-9]?[0-9]|2[0-4]\\d|25[0-5])(\\.([0-1]?[0-9]?[0-9]|2[0-4]\\d|25[0-5])){3}";
        return str.matches(regex);
    }

    // 匹配中文字符
    // Unicode的汉字编码范围:U+4E00 - U+9FA5
    public static Boolean matchChinese(String str){
        String regex = "[\\u4e00-\\u9fa5]+";
        return str.matches(regex);
    }
}
相关推荐
产幻少年11 小时前
正则表达式
正则表达式
Spcarrydoinb11 小时前
正则表达式
笔记·学习·正则表达式·脚本语言
大筒木老辈子11 小时前
编译原理复习---正则表达式+有穷自动机
正则表达式
yivifu11 小时前
在VBA中结合正则表达式和查找功能给文档添加交叉连接
正则表达式·word·vba·交叉链接
╰つ゛木槿2 天前
使用正则表达式提取PDF文件页数的实现方案
正则表达式·pdf
梦幻加菲猫2 天前
正则表达式在线校验(RegExp) - 加菲工具
正则表达式·校验·在线正则表达式校验
Yake19653 天前
正则表达式中^的用法
数据库·mysql·正则表达式
fuvuof4 天前
正则表达式——数量,边界,分组匹配
python·正则表达式
白八实6 天前
文本编辑器与正则表达式
正则表达式