JAVA正则表达式

以QQ号为例

我们先对QQ的规则做一个判断

JAVA代码如下:

public static boolean checkQQ(String qq){
    //长度在6~20位以内
    int len=qq.length();
    if(len<6||len>20)
        return false;
    //0不能在开头
    //char c=qq.charAt(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;
}

使用正则表达式后,代码如下

String qq="1234567890";
boolean result=checkQQ(qq);
//System.out.println(result);   //true

//正则表达式
System.out.println(qq.matches("[1-9]\\d{5,19}"));

常见的正则表达式如下:

正则表达式是java.lang.object类中的子类pattern类

使用前需要导包java.util.regex.Pattern

下面是关于正则表达式的应用:

public class RegexDemo2 {
    public static void main(String[] args) {
        //public boolean matches(String regex):判断是否与正则表达式匹配,匹配返回true

        //字符类(只能匹配一个字符)

        //只能出现abc,一个[]只能匹配一个字符
        System.out.println("---1---");
        System.out.println("a".matches("[abc]"));  //true
        System.out.println("ab".matches("[abc]"));  //false
        System.out.println("ab".matches("[abc][abc]"));  //true

        //不能出现abc
        System.out.println("---2---");
        System.out.println("a".matches("[^abc]"));  //false

        //a到z A到Z的范围
        System.out.println("---3---");
        System.out.println("a".matches("[a-zA-Z]"));  //true
        System.out.println("az".matches("[a-zA-Z][a-zA-Z]"));  //true
        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("e".matches("[a-d[m-p]]"));  //false
        System.out.println("m".matches("[a-d[m-p]]"));  //true

        //[a-z&&[def]]  a-z和def的交集 为 d、e、f
        //细节:交集要写&& 而不能写& 写成&没有任何含义,只是一个&符号
        System.out.println("---5---");
        System.out.println("d".matches("[a-z&&[def]]")); //true
        System.out.println("t".matches("[a-z&&[def]]")); //false

        //[a-z&&[^bc]  a-z和非bc的交集
        System.out.println("---6---");
        System.out.println("a".matches("[a-z&&[^bc]]"));  //true
        System.out.println("b".matches("[a-z&&[^bc]]"));  //false

        //[a-z&&[^m-p] a到z和非(m到p)的交集
        System.out.println("---7---");
        System.out.println("a".matches("[a-z&&[^m-p]]"));  //true
        System.out.println("m".matches("[a-z&&[^m-p]]"));  //false



    }

 public static void main(String[] args) {
        //预定义字符(只能匹配一个字符)
        //   \转义字符 改变后面那个字符原本的含义
        //   ""在Java中表示字符串的开头或者结尾
        System.out.println("\"");

        // .表示任意一个字符
        System.out.println("---1---");
        System.out.println("火".matches("."));  //true
        System.out.println("火影".matches(".."));  //true

        //  \\d 表示任意的一个数字
        System.out.println("---2---");
        System.out.println("3".matches("\\d"));  //true
        System.out.println("33".matches("\\d\\d"));  //true

        //  \\w只能是一位单词字符 [a-zA-Z_0-9]
        System.out.println("---3---");
        System.out.println("_".matches("\\w"));  //true
        System.out.println("g".matches("\\w"));  //true
        System.out.println("6".matches("\\w"));  //true

        //  非单词字符 \\W
        System.out.println("---4---");
        System.out.println("原".matches("\\W"));  //true
        System.out.println("原".matches("\\w"));  //false

        //校验多个字符
        /*
            X?      X出现1次或0次
            X*      X出现0次或多次
            X+      X出现一次或多次
            X{n}        X正好n次
            X{n,}       X至少n次
            X{n,m}      X至少n次,不超过m次
         */
        //必须是数字 字母 下划线 至少6位
        System.out.println("---5---");
        System.out.println("as314v".matches("\\w{6,}"));  //true
        System.out.println("as31".matches("\\w{6,}"));  //false

        // 必须是数字和字符 必须是4位
        System.out.println("---6---");
        System.out.println("23dF".matches("[a-zA-Z0-9]{4}")); //true
        System.out.println("2h0k".matches("[\\w&&[^_]]{4}"));  //true
        System.out.println("2h_k".matches("[\\w&&[^_]]{4}"));  //false


    }

public static void main(String[] args) {
        /*
            编写正则表达式验证手机号码是否满足要求
            编写正则表达式验证邮箱是否满足要求
            编写正则表达式验证用户输入的电话号码是否满足要求

         */

        //从左往右去写
        //第一部分:1表示手机号码只能以1开头
        //第二部分:[3-9]表示手机号码第二位只能是3-9之间
        //第三部分:\\d{9}表示任意数字出现9次
        String regex1="1[3-9]\\d{9}";
        System.out.println("15392077658".matches(regex1)); //true
        System.out.println("25392037668".matches(regex1)); //false
        System.out.println("12392007688".matches(regex1)); //false

        //座机号码
        //020-23242   02122442    027-42424  0712-324234
        //分为三部分
        //第一部分:区号  0\\d{2,3}表示以0开头第二第三位可以是任意数字
        //第二部分:-    -?表示次数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-23242".matches(regex2));  //true


        //邮箱号码
        //10000@qq.com  xiyou@gmail.com dlei0009@pci.com.cn
        //第一部分:@的左边 \\w+ 表示至少出现1次
        //第二部分:@  @表示只能出现1次
        //第三部分:
            //3.1:  .的左边 [\\w&&[^_]]{2,6}表示任意字母和数字出现6次不能出现_
            //3.2   .   \\.表示.
            //3.3   .的右边  [a-zA-Z]{2,3}大写字母和小写字母都可以

        String regex3="\\w+@[\\w&&[^_]]{2,6}(\\.[a-zA-Z]{2,3}){1,2}";
        System.out.println("grapefuritbin@gamil.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){2}";
        //16:10:35
        System.out.println("21:21:10".matches(regex4)); //true

    }
 public static void main(String[] args) {
        /*
        1.验证用户名是否满足要求
        要求:大小写字母,数字,下划线一共是4-16位
        2.身份证号码简单校验
        要求:18位,前17位为任意数字,最后一位可以是数字和大小写的X
         */

        //1用户名
        String regex1="\\w{4,16}";
        System.out.println("zhangsan_".matches(regex1)); //true
        System.out.println("zhangsa.s+".matches(regex1)); //false


        //2身份证号
        String regex2="[1-9]\\d{16}[xX[0-9]]";
        String regex3="[1-9]\\d{16}(x|X|\\d)";
        String regex5="[1-9]\\d{16}((?i)x|\\d)";
        System.out.println("43010220001111200x".matches(regex5));  //true


        System.out.println("-------");
        //忽略大小写的书写方式
        //在匹配的时候忽略abc的大小写
        String regex4="a((?i)b)c";
        System.out.println("abc".matches(regex4));  //true
        System.out.println("ABc".matches(regex4));  //false
        System.out.println("aBC".matches(regex4));  //false

        //3身份证号严格标准
        //350524 2002 0114 2019
        //前面6位:省市派出所等信息,第一位不能是0,后面5位是任意数字 [1-9]\\d{5}
        //年前半段:18 19 20   (18|19|20)
        //年的后半段:任意数字出现两次  \\d{2}
        //月份: 01~09 10 11 12  (0[1-9]|1[0-2])
        //日期: 01~30            (0[1-9]|[12]\d|30)
        //后面4位: 任意数字出现3次,最后一位可以是大小写X或者数字    \d{3}[(?i)x\d]
        String regex6="[1-9]\\d{5}(18||19||20)\\d{2}(0[1-9]|1[0-2])(0[1-9]|[12]\\d|30)\\d{3}[(?i)x\\d]";
        System.out.println("35052420001124801x".matches(regex6));  //true
        System.out.println("13013319851224801x".matches(regex6));  //true
        System.out.println("350524200011248018".matches(regex6));  //true

    }

 

 

 

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

西柚Pi

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

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

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

打赏作者

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

抵扣说明:

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

余额充值