java---正则表达式

java之正则表达式

1,概念

	正则表达式,又称规则表达式。(英语:Regular Expression,常简写为regex)。
	正则表达式通常被用来检索、替换那些符合某个模式(规则)的文本。
	支持正则表达式的有:PHP、Java、Python、JavaScript等。
	有了正则表达式写代码更加简洁,通常两三行代码就可以达到目的。

2,规则

2.1任意一个字符表示匹配任意对应的字符,如a匹配a,7匹配7,匹配

		String m="hello";
        System.out.println(m.matches("hello"));

2.2 []代表匹配中括号中其中任一个字符,如[abc]匹配a或b或c

        String m1="a";
        System.out.println(m1.matches("[abc]"));

2.3 在中括号里面和外面代表含义不同,如在外时,就匹配-,如果在中括号内[a-b]表示匹配26个小写字母中的任一个;[a-zA-Z]匹配大小写共52个字母中任一个;[0-9]匹配十个数字中任一个

String s="-o";
        System.out.println(s.matches("[-o]"));
        System.out.println(s.matches("-[o]"));  //在中括号外面能匹配到
        System.out.println(s.matches("-[n-p]"));
        System.out.println(s.matches("[-a-z]"));

在这里插入图片描述
2.4 ^在中括号里面和外面含义不同,如在外时,就表示开头,如 ^7[0-9]表示匹配开头是7的,且第二位是任一数字的字符串;如果在中括号里面,表示除了这个字符之外的任意字符(包括数字,特殊字符),如[ ^abc]表示匹配出去abc之外的其他任一字符

        String s="z^a";
        System.out.println(s.matches("^z[^abc][abc]"));

2.5 .表示匹配任意的字符

        String s="^&*H.";
        System.out.println(s.matches("....."));
        System.out.println(s.matches("....[.]"));
        System.out.println(s.matches(".....\\."));

在这里插入图片描述
2.6 \d表示数字

        String s="123";
        System.out.println(s.matches("\\d\\d\\d")); //因为字符串中有三个数字,所以要有三个,每个\\d只匹配一个数字
        System.out.println(s.matches("[0-9][0-9][0-9]"));

2.7 \D表示非数字

        String s="abc";
        System.out.println(s.matches("\\D\\D\\D"));

2.8 \w表示字母、数字、下划线,[a-zA-Z0-9_]

        String s="d_9";
        System.out.println(s.matches("[0-9A-Za-z_][0-9A-Za-z_][0-9A-Za-z_]"));

2.9 \W表示不是由字母、数字、下划线组成

        String s="d_9";
        System.out.println(s.matches("\\w\\w\\w"));
        System.out.println(s.matches("[0-9A-Za-z_][0-9A-Za-z_][0-9A-Za-z_]"));

2.10 [\u4e00-\u9fa5]匹配汉字

        String name="姓名:tom";
        System.out.println(name.matches("[\u4e00-\u9f5a][\u4e00-\u9f5a]:[a-z][a-z][a-z]"));
        System.out.println(name.matches("姓名:[a-z][a-z][a-z]"));

2.11

{n}表示出现n次
{n,m}表示出现n~m次
{n,}表示出现n次或n次以上
        String a="abc";
        System.out.println(a.matches("[a-z]{3}"));
        System.out.println(a.matches("[a-z]{1,3}"));
        System.out.println(a.matches("[a-z]{3}"));

在这里插入图片描述

?: 表示出现0次或1次
+表示出现1次或多次
*表示出现0次、1次或多次
        String s="你好呀:666";
        System.out.println(s.matches("[\u4e00-\u9f5a]{1,4}:\\w{3}"));
        System.out.println(s.matches("[\u4e00-\u9f5a]{3}:\\w{3}"));
        System.out.println(s.matches("[\u4e00-\u9f5a]{3,3}:\\w{3}"));
        System.out.println(s.matches("[\u4e00-\u9f5a]+:\\w{3}"));   //+表示1次以及以上
        System.out.println(s.matches("[\u4e00-\u9f5a]*:\\w{3}"));   //*表示任意次数
        System.out.println(s.matches("[\u4e00-\u9f5a]?:\\w{3}"));   //? 表示0或1次,因为有3个数字,所以应为false

在这里插入图片描述
补充知识点:断言,预测,排除
(?!正则 ) 预测,排除

案例1:接受用户输入的一个字符串,判断是否为hellokitty

        Scanner sc = new Scanner(System.in);
        System.out.print("请输入字符串:");
        String s = sc.next();
        System.out.println(s.matches("hellokitty"));
        System.out.println(s.matches("\\w{10}"));

在这里插入图片描述
案例2:判断由至少5个字母组成的字符串

        Scanner sc = new Scanner(System.in);
        System.out.print("请输入字符串:");
        String s = sc.next();
        System.out.println(s.matches("\\w{5,}"));

在这里插入图片描述
在这里插入图片描述

案例3:qq邮箱:6-11数字@qq.com

        String s="1071461302@qq.com";
        System.out.println(s.matches("\\d{6,11}[@]qq\\.com"));
        System.out.println(s.matches("\\d*[@]qq\\.com"));
        System.out.println(s.matches("\\d{6,11}[@][a-z]{2}\\.[a-z]{3}"));

在这里插入图片描述

案例4:密码校验:8-20位,小写字母、大写字母、数字中的至少两种

        Scanner sc = new Scanner(System.in);
        for (int i = 0; i < 5 ; i++) {		//这里为了方便验证,可以使用循环
            System.out.print("请输入字符串:");
            String s = sc.next();
            //思路:因为有很多情况,所以我们利用断言,来进行逆向考虑,
            //排除全是数字,排除全是小写字母和全是大写字母,剩下的便是其他的可能性,也是我们想要的组合
            if (s.matches("(?![a-z]{8,20}$)(?![A-Z]{8,20})(?!\\d{8,20}$)[a-zA-Z0-9]{8,20}")){
                System.out.println("正确");
            }else {
                System.out.println("错误");
            }
        }

在这里插入图片描述

案例5:某网站要求账号的密码只能是:字母和数字,不能都是字母,不能都是数字,且要求字母开头,长度在6-12之间

        Scanner sc = new Scanner(System.in);
        for (int i = 0; i < 5; i++) {
            System.out.print("请输入密码字符串:");
            String s = sc.next();
            if (s.matches("(?![a-z]{6,12}$)(?![0-9]{6,12}$)(?![A-Z]{6,20}$)^[a-zA-Z][a-zA-Z0-9]{5,11}$")){
                System.out.println("密码正确");
            }else {
                System.out.println("密码错误");
            }
        }

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值