Java之正则表达式

先爽一下正则表达式

校验qq账号是否符合要求:

  //qq账号规则为:不能以0开头,必须全都是数字,而且长度在6位及20位之间
    String qq = "123456789";
    boolean flag = qq.matches("[1-9]\\d{5,19}");
    System.out.println(flag);//true

你只要把qq账号的正则表达式写出来,检验就交给matches()方法就好了,从这就可以开出来正则表达式是非常方便,非常神奇的。但是正则表达式不仅仅只有这一个功能。它的功能我给你总结出来了:
作用一:校验字符串是否满足规则
作用二:在一段文本中查找满足要求的内容

一、正则表达式中的字符含义:

1.匹配单个字符

在这里插入图片描述

1.[abc] 只能是 a , b ,c 其中一个,代码如下:

        System.out.println("a".matches("[abc]"));//true
        System.out.println("z".matches("[abc]"));//false
        System.out.println("ab".matches("[abc]]"));//false
        System.out.println("ab".matches("[abc][abc]"));//true

2. [^abc] 不能出现 a b c 其中的一个,代码如下:

//不能出现 a b c
        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

3[a-zA-Z][a-z[A-Z]]一样 :a到z A到Z(包括头尾的范围)代码如下

    System.out.println("a".matches("[a-zA-Z]"));//true
    System.out.println("z".matches("[a-z[A-Z]]"));//true
    System.out.println("aa".matches("[a-zA-Z]"));//false
    System.out.println("aa".matches("[a-zA-Z][a-zA-Z]"));//true
    System.out.println("A".matches("[a-zA-Z]"));//true
    System.out.println("0".matches("[a-zA-Z]"));//false
    

4.[a-z&&[def]] a-z和def的交集。 为d,e,f

注意细节:如果要求两个范围的交集,那么需要写符号 &&。如果写成一个&,那么此时&表示就不是交集了,而是一个简简单单的&符号

        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

5.[a-z&&[^bc]]a-z和非bc的交集 (等同于[ad-z])

        System.out.println("a".matches("[a-z&&[^bc]]"));//true
        System.out.println("d".matches("[a-z&&[^bc]]"));//true
        System.out.println("0".matches("[a-z&&[^bc]]"));//false

6.[a-z&&[^m-p]] a-z和除了m-p的交集 (等同于[a-lq-z])

        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

在这里插入图片描述
在java中 ’ \ ’ 为转移字符 改变后边那个字符原本的含义
练习:以字符串的形式打印一个双引号

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

提示 :两个 ’ \ ’ 表示一个’ \ ’

7.. 表示任意一个字符

		System.out.println("你".matches(".."));//false
        System.out.println("你a".matches(".."));//true

8.\\d表示只能是以为数字

        System.out.println("a".matches("\\d"));//false
        System.out.println("3".matches("\\d"));//true
        System.out.println("333".matches("\\d"));//false

9.\\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

10.\\W 非单词字符

		System.out.println("你".matches("\\W"));//true

2.数量词(可以匹配多个字符了)

在这里插入图片描述
上图中的X表示任意内容
代码演示如下:

1.X{n,}至少n次

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

2.X{n} 正好n次

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

二、使用正则表达式写简单案例

编写正则表达式心得:拿着一个正确的数据,从左到右依次去写

1.验证手机号是否满足要求

正确的电话号码:18830276498

	   //18830276498
        String regex1 = "1[3-9]\\d{9}";//表示 1[3-9][0-9]{9}
        System.out.println("18830276498".matches(regex1));//true
        System.out.println("19566115677".matches(regex1));//true
        System.out.println("188302764981".matches(regex1));//false

2.验证座机电话号码

正确的电话号码:020-23242420321-324242102122442027-42424
代码如下(示例):

        //`020-2324242`  或  `0321-3242421` 或 `02122442` 或 `027-42424`
        //第一部分:区号   0\d{2,3} 一定是以0开头 ,从第二位开始是任意的数字,可以出现2到3次
        //第二部分:-     ?表示次数0次或1次
        //第三部分:号码   [1-9]\d{4,9}:号码的第一位也不能以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("0321-3242421".matches(regex2));//true
        System.out.println("02122442".matches(regex2));//true
        System.out.println("027-42424".matches(regex2));//true

3.校验邮箱号码

正确的邮箱:2042501541@qq.com 或者 zhangsan@haoyun.cnn 或者 dlei0009@163.com 或者 dlei0009@pco.com.cn

         //邮箱号码 `2042501541@qq.com` 或者 `zhangsan@haoyun.cnn` 或者 `dlei0009@163.com` 或者 `dlei0009@pco.com.cn`
        //思路:
        //书写邮箱分为三部分
        //第一部分:@的左边  可以是数字也可以是字母也可以是 _
        //  \\w+ 表示任意的字母数字下划线,至少出现一次就可以了
        //第二部分:@ 只能出现一次
        //第三部分:
        //      第一线:.的左边 [\\w&&[^_]]{2,6} 任意的字母加数字,总共出现2-6次(不能出现下滑线)
        //      第二段:.  \\.  一个.
        //      第三段:大写字母,小写字母都可以,只能出现2-3次 [a-zA-Z]{2,3}
        //      我们可以把第二段和第三段 看成一组,这一组可以出现1次或两次
        String regex3 = "\\w+@[\\w&&[^_]]{2,6}(\\.[a-zA-Z]{2,3}){1,2}";
        System.out.println("2042501541@qq.com".matches(regex3));//true
        System.out.println("zhangsan@haoyun.cnn".matches(regex3));//true
        System.out.println("dlei0009@163.com".matches(regex3));//true
        System.out.println("dlei0009@pco.com.cn".matches(regex3));//true
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值