JavaSE进阶之Regex:正则表达式

1.用途

正则表达式用于输入字符串的校验,可极大简化代码的书写,经常应用于用户输入比如电话、邮箱、身份证号等内容的校验,属于Java开发必学内容。

2.用法

将字符串的限定规则Rule写成字符串形式,字符串的内容是正则表达式。被校验字符串Str调用String类的成员方法boolean mathces(String Regex),将Rule传入,可对Str进行校验。校验成功返回true,否则返回false。

简单的使用场景:要求输入的QQ号(字符串形式)是6-20位的纯数字。

        //验证QQ号
        Scanner scanner = new Scanner(System.in);
        String qq=null;
        while(scanner.hasNext())
        {
            qq=scanner.nextLine();
            qq = qq.replaceAll(" ", "");
            if(qq.matches("\\d{6,20}"))
            {
                System.out.println("QQ号正确");
            }
            else
            {
                System.out.println("QQ号错误");
            }
        }

相对于普通的逻辑判断“1.字符串长度在(6,20)中;2.字符串内容是数字”,显得非常简洁。

3.正则表达式中符号的含义

为了解正则表达式的使用,必须知道其中的符号对应的含义。

3.1单个字符的匹配规则1:字符类C

用中括号[]将字符围起来,表示被比较字符的该位置处必须是中括号中的内容。如[a]表示该位置处必须是字符a。

[]中的字符可以有多个,由此产生如下规则(直接举例说明含义):

[abc]是一个字符,表示只能是a,b,c其中一个

[^abc]表示非a且非b且非c,即对[abc]数学逻辑上取反

[a-d]表示a,b,c,d其中任意一个

[a-zA-Z]表示是a到z或A到Z其中一个,即26个字母之一,不同类型(大小写)可用[]进行分离,但含义不变,[a-zA-Z]=[a-z[A-Z]]

[a-d&&[^c]]表示a,b,d其中一个,对c进行了排除,&&:且

[a-d&&[^b-c]]表示a,d,对b,c进行了排除。

-&&的作用范围是其本身左右两边的内容,^的作用范围是其本身右边的内容,[]表示一个已完成的表达式,[]可以进行嵌套使用,如[a-d&&[^b-c]]

3.2单个字符的匹配规则2:预定义类Y

.匹配任意字符

\d 表示[0-9],即一个数字

\D表示[^0-9],即非数字

\s表示空白字符,即空格

\S表示非空格

\w表示当前字符属于英文、数字和下划线其中的一类,即单词

\W表示非单词字符

3.3贪婪量词(对单个字符的个数进行校验)

上述两类都是对字符的内容进行校验,贪婪量词则对字符出现的次数进行了校验。

设已有单个字符的匹配规则XXC或者Y(即前面两类),X出现的次数为count有如下定义

X? 表示1次或0次,即count∈{0,1}

X* 表示0次或无数次,即count∈[0,+∞}

X+ 表示一次或多次,即count∈[1,+∞}

X{n} 表示正好n次,即count=n

X{n,}表示至少n次,即count∈[n,+∞)

X{m,n}表示至少m但不超过n,即count∈[m,n)

特殊字符 . 和 \ 需要在符号前加上斜杠\进行转义,否则不生效.

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

暗=里

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值