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 |

相关推荐
来杯@Java16 分钟前
图书管理系统(基于springboot+vue前后端分离的项目)计算机毕业设计java
java·spring boot·spring·vue·毕业设计·mybatis·课程设计
卷毛的技术笔记1 小时前
告别硬编码!Spring AI Alibaba 实现 AI Agent 智能工具调用(Tool Calling)
java·人工智能·后端·python·spring·ai编程
编程大师哥1 小时前
匿名函数 lambda + 高阶函数
java·python·算法
isyangli_blog1 小时前
OpenDayLight (Carbon 版本) 启动与组件安装
开发语言·php
vb2008111 小时前
FastAPI APIRouter
开发语言·python
Benszen1 小时前
KVM虚拟化解决方案
开发语言·perl
会编程的土豆1 小时前
Go 语言反射(Reflection)详解
开发语言·后端·golang
東雪木1 小时前
多线程与并发编程 专属复习笔记
java·开发语言·笔记·java面试
adrninistrat0r1 小时前
Java调用链MCP分析工具
java·python·ai编程
杨充2 小时前
1.3 浮点型数据设计灵魂
开发语言·python·算法