Java—— 正则表达式

作用

1.校验字符串是否满足规则

2.在一段文本中查找满足要求的内容

代码格式:

String regex = " 正则表达式具体内容 ";

String str = " 要验证的字符串 ";

boolean flag = str.matches(regex);

匹配成功返回true,失败返回false

字符类(只匹配一个字符)

|----------------------|------------------------------|
| abc | 只能是a,b,或c |
| \^abc | 除了a,b,c之外的任何字符 |
| a-zA-Z | a到z A到Z,包括(范围) |
| a-d\[m-p] | a到d,或m到p |
| a-z\&\&\[def] | a-z和def的交集,为:d,e,f |
| a-z\&\&\[\^bc] | a-z和非bc的交集,(等同于ad-z) |
| a-z\&\&\[\^m-p] | a到z和除了m到p的交集,(等同于a-lq-z) |

代码演示:

java 复制代码
public class RegexDemo2 {
    public static void main(String[] args) {
        //public boolean matches(String regex):判断是否与正则表达式匹配,匹配返回true
        // 只能是a b c
        System.out.println("-----------1-------------");
        System.out.println("a".matches("[abc]")); // true
        System.out.println("z".matches("[abc]")); // false

        // 不能出现a b c
        System.out.println("-----------2-------------");
        System.out.println("a".matches("[^abc]")); // false
        System.out.println("z".matches("[^abc]")); // true
        System.out.println("zz".matches("[^abc]")); //false
        System.out.println("zz".matches("[^abc][^abc]")); //true

        // a到zA到Z(包括头尾的范围)
        System.out.println("-----------3-------------");
        System.out.println("a".matches("[a-zA-z]")); // true
        System.out.println("z".matches("[a-zA-z]")); // true
        System.out.println("aa".matches("[a-zA-z]"));//false
        System.out.println("zz".matches("[a-zA-Z]")); //false
        System.out.println("zz".matches("[a-zA-Z][a-zA-Z]")); //true
        System.out.println("0".matches("[a-zA-Z]"));//false
        System.out.println("0".matches("[a-zA-Z0-9]"));//true


        // [a-d[m-p]] a到d,或m到p
        System.out.println("-----------4-------------");
        System.out.println("a".matches("[a-d[m-p]]"));//true
        System.out.println("d".matches("[a-d[m-p]]")); //true
        System.out.println("m".matches("[a-d[m-p]]")); //true
        System.out.println("p".matches("[a-d[m-p]]")); //true
        System.out.println("e".matches("[a-d[m-p]]")); //false
        System.out.println("0".matches("[a-d[m-p]]")); //false

        // [a-z&&[def]] a-z和def的交集。为:d,e,f
        System.out.println("----------5------------");
        System.out.println("a".matches("[a-z&[def]]")); //false
        System.out.println("d".matches("[a-z&&[def]]")); //true
        System.out.println("0".matches("[a-z&&[def]]")); //false

        // [a-z&&[^bc]] a-z和非bc的交集。(等同于[ad-z])
        System.out.println("-----------6------------_");
        System.out.println("a".matches("[a-z&&[^bc]]"));//true
        System.out.println("b".matches("[a-z&&[^bc]]")); //false
        System.out.println("0".matches("[a-z&&[^bc]]")); //false

        // [a-z&&[^m-p]] a到z和除了m到p的交集。(等同于[a-1q-z])
        System.out.println("-----------7-------------");
        System.out.println("a".matches("[a-z&&[^m-p]]")); //true
        System.out.println("m".matches("[a-z&&[^m-p]]")); //false
        System.out.println("0".matches("[a-z&&[^m-p]]")); //false

    }
}

预定义字符(只匹配一个字符)

|-----|------------------------------|
| . | 任何字符 |
| \d | 一个数字:0-9 |
| \D | 非数字:\^0-9 |
| \s | 一个空白字符:\\t\\n\\x0B\\f\\r |
| \S | 非空白字符:\^\\s |
| \w | a-zA-Z_0-9 英文、数字、下划线 |
| \W | \^\\w 一个非单词字符 |

代码演示:

java 复制代码
public class RegexDemo3 {
    public static void main(String[] args) {
        // \ 转义字符 改变后面那个字符原本的含义
        //练习:以字符串的形式打印一个双引号
        //"在Java中表示字符串的开头或者结尾

        //此时\表示转义字符,改变了后面那个双引号原本的含义
        //把他变成了一个普普通通的双引号而已。
        System.out.println("\"");

        // \表示转义字符
        //两个\的理解方式:前面的\是一个转义字符,改变了后面\原本的含义,把他变成一个普普通通的\而已。
        System.out.println("c:Users\\moon\\IdeaProjects\\basic-code\\myapi\\src\\com\\itheima\\a08regexdemo\\RegexDemo1.java");


        //.表示任意一个字符
        System.out.println("你".matches("..")); //false
        System.out.println("你".matches(".")); //true
        System.out.println("你a".matches(".."));//true

        // \\d 表示任意的一个数字
        // \\d只能是任意的一位数字
        // 简单来记:两个\表示一个\
        System.out.println("a".matches("\\d")); // false
        System.out.println("3".matches("\\d")); // true
        System.out.println("333".matches("\\d")); // false

        //\\w只能是一位单词字符[a-zA-Z_0-9]
        System.out.println("z".matches("\\w")); // true
        System.out.println("2".matches("\\w")); // true
        System.out.println("21".matches("\\w")); // false
        System.out.println("你".matches("\\w"));//false

        // 非单词字符
        System.out.println("你".matches("\\W")); // true
        
    }
}

数量词

|--------|-------------|
| x? | X,0次或1次 |
| X* | X,0次或多次 |
| X+ | X,1次或多次 |
| x{n} | X,正好n次 |
| x{n,} | X,至少n次 |
| x{n,m} | X,至少n但不超过m次 |

代码演示:

java 复制代码
public class Test5 {
    public static void main(String[] args) {

        //必须是数字 字母 下划线 0次或1次
        System.out.println("".matches("\\w?"));//true
        System.out.println("a".matches("\\w?"));//true
        System.out.println("aa".matches("\\w?"));//false

        //必须是数字 字母 下划线 0次或多次
        System.out.println("".matches("\\w*"));//true
        System.out.println("a".matches("\\w*"));//true
        System.out.println("aa".matches("\\w*"));//true

        //必须是数字 字母 下划线 1次或多次
        System.out.println("".matches("\\w+"));//false
        System.out.println("a".matches("\\w+"));//true
        System.out.println("aa".matches("\\w+"));//true

        // 必须是数字 字母 下划线 至少 6位
        System.out.println("2442fsfsf".matches("\\w{6,}"));//true
        System.out.println("244f".matches("\\w{6,}"));//false

        // 必须是数字和字符 必须是4位
        System.out.println("23dF".matches("[a-zA-Z0-9]{4}"));//true
        System.out.println("23 F".matches("[a-zA-Z0-9]{4}"));//false
        System.out.println("23dF".matches("[\\w&&[^_]]{4}"));//true
        System.out.println("23_F".matches("[\\w&&[^_]]{4}"));//false

        // 必须是数字 字母 下划线 至少3但不超过6次
        System.out.println("".matches("\\w{3,6}"));//false
        System.out.println("12".matches("\\w{3,6}"));//false
        System.out.println("123".matches("\\w{3,6}"));//true
        System.out.println("123456".matches("\\w{3,6}"));//true
        System.out.println("1234567".matches("\\w{3,6}"));//false
    }
}

正则表达式符号总结:

|-----------|-------------|-------------------------|
| 符号 | 含义 | 举例 |
| | 里面的内容出现一次 | 0-9 a-zA-Z0-9 |
| ( ) | 分组 | a(bc)+ |
| ^ | 取反 | \^abc |
| && | 交集,不能写单个的& | a-z\&\&m-p |
| | | 写在方括号外面表示并集 | x|X |
| . | 任意字符 | \n 回车符号不匹配 |
| \ | 转义字符 | \\d |
| \\d | 0-9 | \\d{2,4} |
| \\D | 非0-9 | \\D{2,4} |
| \\s | 空白字符 | \\t\\n\\x0B\\f\\r |
| \\S | 非空白字符 | \^\\s |
| \\w | 单词字符 | a-zA-Z_0-9 |
| \\W | 非单词字符 | \^\\w |
| ? | 0次或1次 | \\d? |
| * | 0次或多次 | (abc)* |
| + | 1次或多次 | (abc)+ |
| {} | 具体次数 | a{7} \\d{7,19} |
| (?i) | 忽略后面字符的大小写 | (?i)abc |
| a((?i)b)c | 只忽略b的大小写 | a((?i)b)c |

相关推荐
chjif2 分钟前
一张照片和一段声音如何生成口播视频:MiniMax H3 音画同步实测
java·前端·javascript
布莱克6054 分钟前
队列详解:定义、分类、应用场景及与栈的区别(C/C++ 代码讲解)
c语言·开发语言·c++·队列
CPETW5 分钟前
USB TO I2C_(Excel)_Scan ---- 1000KHz总线速率测试_A
c语言·开发语言·网络·科技·单片机
2601_9622035110 分钟前
【SpringBoot3】面向切面 AspectJ AOP 使用详解
开发语言·前端·python
程序员大雄学编程12 分钟前
微积分43. 无穷积分入门:从概念到Python实战可视化
开发语言·python·学习·微积分
何以解忧,唯有..12 分钟前
LangChain 中 Pydantic 格式输出:结构化输出的完整指南
java·开发语言·langchain
郝学胜-神的一滴21 分钟前
C++11 工程级应用 06:自己造一个类似Python的Range迭代器
开发语言·c++·windows·python·程序人生·microsoft
zh_xuan32 分钟前
c++ jthread
开发语言·c++·jthread
旧梦952733 分钟前
Java 捕获多个异常:从基础语法到最佳实践
java·开发语言
2601_9621896037 分钟前
【SpringBoot】使用IDEA创建SpringBoot项目
java·spring boot·intellij-idea