Java常用API----正则表达式

正则表达式作用:1.校验字符串是否满足规则;2.在一段文本中查找满足要求的内容

正则表达式:

字符类:

[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])

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

. ----->任何字符

\d----->一个数字:[0-9]

\D----->非数字:[^0-9]

\s----->空白字符:[\t\n\x08\f\r]

\S------>非空白字符:[^\s]

\w------>[a-zA-Z_0-9]:字母、数字、下划线

\W------>[^\w]:一个非单词字符

注意:\ 转义字符:改变后面那个字符原本的含义

例如:" 在Java中表示字符串的开头或者结尾,所以如果想打印一个双引号"

             System.out.println("\"");

数量词:

X?------->X,一次或0次

X*-------->X,零次或多次

X+-------->X,一次或多次

X{n}-------->X,正好n次

X{n,}-------->X,至少n次

X{n,m}--------->X,至少n但不超过m次

练习1:校验一个QQ号是否正确

6-20位之内,0不能在开头,必须全部是数字

方法1:(以前学习的方法)

package a07regexdemo;

public class RegexDemo1 {
    public static void main(String[] args) {
        String qq="1234567890";
        System.out.println(checkQQ(qq));//true
    }

    public static boolean checkQQ(String qq){
        //核心思想:
        //先把异常数据进行过滤,下面的就是满足要求的数据了
        int len=qq.length();
        if(len<6||len>20){
            return false;
        }
        //0不能开头
        if(qq.startsWith("0")){
            return false;
        }
        //必须全部都是数字
        for (int i = 0; i < qq.length(); i++) {
            char c=qq.charAt(i);
            if(c<'0'||c>'9'){
                return false;
            }
        }
        return true;
    }

}

运行结果:

 

方法2:正则表达式方法:

package a07regexdemo;

public class RegexDemo1 {
    public static void main(String[] args) {
        String qq="1234567890";
        System.out.println(qq.matches("[1-9]\\d{5,19}"));//true
    }

}

练习2:

用正则表达式验证用户输入的手机号是否满足要求

用正则表达式验证用户输入的邮箱号是否满足要求

用正则表达式验证用户输入的座机号是否满足要求

package a07regexdemo;

public class RegexDemo2 {
    public static void main(String[] args) {
        //手机号码的验证:
        //心得:拿着一个正确的数据从左到右依次去写
        //13112345678
        //分成三部分:
        //第一部分:1表示手机号码只能以1开头
        //第二部分:[3-9]表示手机号码第二位只能是3-9之间的
        //第三部分:\\d{9}表示任意数字只能出现9次,也只能出现9次
        String regex1="1[3-9]\\d{9}";
        System.out.println("13112345678".matches(regex1));//true
        System.out.println("12345677777".matches(regex1));//false
        System.out.println("13712345677".matches(regex1));//true
        System.out.println("13111288888".matches(regex1));//true
        System.out.println("----------------------");

        //座机号码的验证
        //020-2324242,02122442,027-42424,0712-3242434
        //思路:在书写座机号正则的时候需要把正确的数据分为三部分
        //1.区号:0\\d{2,3},区号有可能2位,有可能三位
        //0:表示区号一定是以0开头
        //0\\d{2,3}:表示表示区号从第二位开始可以是任意的数字,可以出现2到3次

        //2.-:?表示次数可以是0次或一次
        //3.号码:号码的第一位也不能是0开头,从第二位开始可以是任意的数字,号码的总长度:5-10位
        //
        //
        String regex2="0\\d{2,3}-?[1-9]\\d{4,9}";
        System.out.println("020-2324242".matches(regex2));//true
        System.out.println("02122442".matches(regex2));//true
        System.out.println("027-42424".matches(regex2));//true
        System.out.println("0712-3242434".matches(regex2));//true
        System.out.println("--------------------");

        //邮箱号码
        //3232323@qq.com  zhangsan@itcast.cnn    dlei0009@163.com    dlei0009@pci.com.cn
        //思路:在书写邮箱号码正则的时候需要把正确的数据分为三部分
        //第一部分:@的左边
        //  \\w+表示a-z  A-Z 0-9 _至少出现一次就可以了
        //第二部分:@ 只能出现一次
        //第三部分:.左边  .   .右边
        //3.1:.左边[\\w&&[^_]]{2,6}  ----->任意的字母加数字总共出现6次(此时不能出现下划线)
        //3.2:.转义.所以是\\.
        //3.3:大写字母,小写字母都可以,只能出现2-3次 [a-zA-Z]{2,3}
        //可以把3.2,3.3看成一组,这一组可以出现一次到两次
        String regex3="\\w+@[\\w&&[^_]]{2,6}(\\.[a-zA-Z]{2,3}){1,2}";

        System.out.println("3232323@qq.com".matches(regex3));//true
        System.out.println("zhangsan@itcast.cnn".matches(regex3));//true
        System.out.println("dlei0009@163.com".matches(regex3));//true
        System.out.println("dlei0009@pci.com.cn".matches(regex3));//true

        //24小时的正则表达式
        String regex4="([01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d";
        //优化24小时的正则表达式
        String regex5="([01]\\d|2[0-3])(:[0-5]\\d){2}";
    }
}

运行结果:

一般用不到正则,只需要百度一个类似的改成我们需要的就可以了

有一个插件:File点Settings按照1,2,3,4步骤依次点击就可以了,里面是大多数正则表达式

  • 10
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值