• 38、Java 中的正则表达式(单字符匹配和预定义字符)


    一、需求

    ❓ 现有一个字符串,需满足如下要求:
    [6, 18] 个字符
    ② 只能包含字母、数字、下划线
    ③ 需以字母开头
    ❓ 如果字符串满足上述要求,返回 true,否则返回 false

       public static boolean validString(String s) {
           return s.matches("[a-zA-Z][a-zA-Z0-9_]{5,17}");
       }
    
    • 1
    • 2
    • 3

    🍀 正则表达式用极简的规则取代了复杂的验证逻辑
    🍀 Regex Expression
    🍀 正则表达式是一种通用的技术,适用于多种编程语言

    二、单字符匹配(6个)

    ✏️ ① [abc]:字符串的某个位置(某一个字符)满足 a、b、c 中的一个

    🍀 某个位置:该【单字符匹配】放的位置

    public class TestDemo {
        public static void main(String[] args) {
            String regex = "[zgq]";
            System.out.println("z".matches(regex)); // true
            System.out.println("g".matches(regex)); // true
            System.out.println("q".matches(regex)); // true
            System.out.println("zgq".matches(regex)); // false
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    public class TestDemo {
        public static void main(String[] args) {
            String regex = "26[abc]3q";
            System.out.println("26a3q".matches(regex)); // true
            System.out.println("26abc".matches(regex)); // false
            System.out.println("26b3q".matches(regex)); // true 
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    ✏️ ② [^abc]:除了 a、b、c 之外的任意单个字符

    public class TestDemo {
        public static void main(String[] args) {
            String regex = "[^cat]666";
            System.out.println("c666".matches(regex)); // false
            System.out.println("a666".matches(regex)); // false
            System.out.println("t666".matches(regex)); // false
            System.out.println("bb666".matches(regex)); // false
            System.out.println("b666".matches(regex)); // true
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    public class TestDemo {
        public static void main(String[] args) {
            String regex1 = "[12345]666";
            String regex2 = "[^1-5]666";
            System.out.println("1666".matches(regex1)); // true
            System.out.println("3666".matches(regex1)); // true
            System.out.println("5666".matches(regex1)); // true
            System.out.println("6666".matches(regex1)); // false
    
            System.out.println("1666".matches(regex2)); // false
            System.out.println("3666".matches(regex2)); // false
            System.out.println("5666".matches(regex2)); // false
    
            System.out.println("6666".matches(regex2)); // true
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16

    ✏️ ③ [a-zA-z]:匹配单个英文字母

    public class TestDemo {
        public static void main(String[] args) {
            String regex = "[a-zA-Z]666";
            System.out.println("6666".matches(regex)); // false
            System.out.println("b666".matches(regex)); // true
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    ✏️ ④ [a-d[1-6]]:和 [a-d1-6] 一样(并集

    public class TestDemo {
        public static void main(String[] args) {
            String regex1 = "[a-d[1-6]]";
            String regex2 = "[a-d1-6]";
            System.out.println("a".matches(regex1)); // true
            System.out.println("e".matches(regex1)); // false
            System.out.println("1".matches(regex1)); // true
            System.out.println("7".matches(regex1)); // false
    
            System.out.println("a".matches(regex2)); // true
            System.out.println("e".matches(regex2)); // false
            System.out.println("1".matches(regex2)); // true
            System.out.println("7".matches(regex2)); // false
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    ✏️ ⑤ [zgq&&[god]]:交集

    public class TestDemo {
        public static void main(String[] args) {
            String regex1 = "[zgq&&[god]]";
            System.out.println("q".matches(regex1)); // false
            System.out.println("d".matches(regex1)); // false
            System.out.println("g".matches(regex1)); // true
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    ✏️ ⑥ [zgq&&[god]]:取差集

    public class TestDemo {
        public static void main(String[] args) {
            String regex1 = "[zgq&&[^god]]";
            System.out.println("q".matches(regex1)); // true
            System.out.println("d".matches(regex1)); // false
            System.out.println("g".matches(regex1)); // false
            System.out.println("z".matches(regex1)); // true
    
            // 取差集, 从字母 a 到字母 z 中去除字母 b 和 d
            String regex2 = "[a-z&&[^bd]]";
            System.out.println("d".matches(regex2)); // false
            System.out.println("a".matches(regex2)); // true
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    三、预定义字符(7个)

    预定义字符匹配的仍然是单个字符

    📝 【.】:任意单个字符
    📝 【\d】:数字
    📝 【\D】:非数字
    📝 【\s】:空白
    📝 【\S】:非空白
    📝 【\w】:字母(英文字母、下划线、数字)
    📝 【\W】:非英文字母

    🍀 Java 中需以两个【\】开头表示预定义字符

    public class TestDemo {
        public static void main(String[] args) {
            String r1 = ".";
            System.out.println("@".matches(r1)); // true
            System.out.println("庆".matches(r1)); // true
            System.out.println("I".matches(r1)); // true
            System.out.println(" ".matches(r1)); // true
            System.out.println(".".matches(r1)); // true
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    public class TestDemo {
        public static void main(String[] args) {
            // 匹配 java 文件
            String r1 = ".\\.java";
            System.out.println("a.java".matches(r1)); // true
            System.out.println("xjava".matches(r1)); // false
            System.out.println("5java".matches(r1)); // false
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    public class TestDemo {
        public static void main(String[] args) {
            String r1 = "[abc]";
            String r2 = "\\[abc\\]";
            System.out.println("a".matches(r1)); // true
            System.out.println("c".matches(r1)); // true
            System.out.println("[abc]".matches(r1)); // false
    
            System.out.println("a".matches(r2)); // false
            System.out.println("c".matches(r2)); // false
            System.out.println("[abc]".matches(r2)); // true
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    结束!如有错误,请不吝赐教

  • 相关阅读:
    数字化营销模式有哪些?数字化营销怎么做?
    Java 泛型
    Vue——vue3+element plus实现多选表格使用ajax发送id数组
    嵌入式分享合集23
    webpack5 基本配置
    String常见算法(一)
    含文档+PPT+源码等]精品微信小程序在线考试系统+后台管理系统|前后分离VUE[包运行成功]微信小程序毕业设计项目源码计算机毕设
    Flash驱动控制--芯片擦除(SPI协议)
    【AIOT】手势捕捉调研
    【Java面向对象】封装的认识与实现
  • 原文地址:https://blog.csdn.net/m0_54189068/article/details/127505993