zoukankan      html  css  js  c++  java
  • 正则表达

    1.正则表达式的概述和简单使用

      是指用来描述或匹配字符串是否符合自己的语法规则,其实就是一种规则,有自己特殊用途

      比如注册账号时,会限制用户名和密码的长度,这个限制长度就是正则表达式做的

     

     1     /**
     2          * B:案例演示
     3          * 需求:校验qq号码.
     4          * 1:要求必须是5-15位数字
     5          * 2:0不能开头
     6          * 3:必须都是数字
     7          */
     8         
     9          demo1();
    10 //         正则表达式的匹配规则,用正则表达式实现
    11         String regex = "[1-9]\\d{4,14}";   
    12         
    13         System.out.println("0123456".matches(regex));        //false
    14         System.out.println("a1234567".matches(regex));        //false
    15         System.out.println("930275779".matches(regex));        //true
    16         System.out.println(Pattern.matches(regex, "1234567"));//true
    17     }
    18 
    19     
    20 //    用已循环和if语句实现
    21     public static void demo1() {
    22         System.out.println(checkQQ("012345"));        //false
    23         System.out.println(checkQQ("930275779"));    //true
    24         System.out.println(checkQQ("1234567891032489"));//false
    25         System.out.println(checkQQ("2346"));        //false
    26     }
    27     public static boolean checkQQ(String s){
    28         boolean flag = true;
    29         //限制长度 5~15 之间
    30         if(s.length()>=5 && s.length()<=15){
    31             //不能以o开头
    32             if(!(s.startsWith("0"))){
    33                 // 把字符串转为字符数组
    34                 char[] chars = s.toCharArray();
    35                 //循环录入要判断的字符数组
    36                 for(int i=0; i<chars.length; i++){
    37                     char ch = chars[i];
    38                     //输入的数字字符必须是0~9
    39                     if(!(ch>='0' && ch<='9')){
    40                         flag = false;
    41                         break;
    42                     }
    43                 }
    44             }else {
    45                 flag = false;   //数字以0开头
    46             }
    47         }else {
    48             flag = false;       // 长度不合法
    49         }
    50         return  flag;
    51     }
    

    2.字符类演示

      /**

        *  [abc] ab c(简单类)

       *  [^abc] 任何字符,除了 ab c(否定)

       *  [a-zA-Z] a z A Z,两头的字母包括在内(范围)

       *  [a-d[m-p]] a d m p[a-dm-p](并集)

       *  [a-z&&[def]] de f(交集)

       *  [a-z&&[^bc]] a z,除了 b c[ad-z](减去)

       *  [a-z&&[^m-p]] a z,而非 m p[a-lq-z](减去)

       */

     1     public static void main(String[] args) { 
     2 //         demo1();
     3         // demo2();
     4          demo3();
     5         // demo4();
     6         // demo5();
     7         // demo6();
     8     }
     9 
    10     public static void demo1() {
    11         String regex = "[abc]"; // []表示单个字符            只有abc这几个单个字符可以匹配
    12         System.out.println("a".matches(regex)); // true
    13         System.out.println("b".matches(regex)); // true
    14         System.out.println("++++++++++");
    15         System.out.println("m".matches(regex)); // false
    16         System.out.println("n".matches(regex)); // false
    17         
    18     }
    19 
    20     public static void demo2() {
    21         String regex = "[^abc]";                //除了abc的单个字符以外,任何单个字符都能满足匹配
    22         System.out.println("a".matches(regex));    // false
    23         System.out.println("m".matches(regex)); // true
    24         System.out.println("sd".matches(regex));//false            是两个字符
    25     }
    26 
    27     private static void demo3() {
    28         //    取交集,也就是两个范围内,相同的单个字符     "[a-z&&[def]]"也是一样
    29         String regex = "[ac&&[dc]]";        
    30         System.out.println("a".matches(regex));
    31         System.out.println("c".matches(regex));
    32         System.out.println("%".matches(regex)); // false
    33     }
    34 
    35     private static void demo4() {
    36         String regex = "[a-d[m-p]]";        //取并集,就是两个范围内的所有单个字符
    37         System.out.println("a".matches(regex));
    38         System.out.println("m".matches(regex));
    39         System.out.println("n".matches(regex));
    40     }
    41 
    42     private static void demo6() {
    43         String regex = "[a-z&&[^bc]]";    //在a-z的单个字符内,除去  bc 这两个单个字符以外,都匹配
    44         System.out.println("a".matches(regex));
    45         System.out.println("b".matches(regex));
    46         System.out.println("1".matches(regex));
    47     }

    3.预定义字符类

      /**
       *       任何字符
       *        \d 数字:[0-9] ---代表单个的数字字符。 \ 是转义字符
       *        \D 非数字: [^0-9] ----取反
       *        \s 空白字符:[ \t\n\x0B\f\r] 代表垂直制表符。f代表翻页dos系统里的,r回车,
       *        \S 非空白字符:[^\s]
       *        \w 单词字符:[a-zA-Z_0-9]
       *        \W 非单词字符:[^\w]

      *   .  代表任意字符,一个点代表一个字符
       */

     1 public static void main(String[] args) {
     2         demo1();
     3         demo2();
     4         demo3();
     5         demo4();
     6         demo5();
     7         demo6();
     8     }
     9 
    10     private static void demo6() {
    11         // \\W   取反  非单词字符
    12         String regex = "\\w";    //单词字符
    13         System.out.println("a".matches(regex)); // true
    14         System.out.println("z".matches(regex)); // true
    15         System.out.println("_".matches(regex)); // true
    16         System.out.println("9".matches(regex)); // false
    17     }
    18 
    19     private static void demo5() {
    20         String regex = "\\S";        // 取反 ,非空白字符
    21         System.out.println(" ".matches(regex)); // 空格 false
    22         System.out.println("   ".matches(regex)); // tab键 false
    23         System.out.println("a".matches(regex)); // true
    24     }
    25 
    26     private static void demo4() {
    27         String regex = "\\s"; // 匹配空白
    28         System.out.println(" ".matches(regex));                        //true
    29         System.out.println("    ".matches(regex)); // 一个tab键        true
    30         System.out.println("    ".matches(regex)); // 四个空格        false
    31     }
    32 
    33     private static void demo3() {
    34         String regex = "\\D";    // [^0-9]取反,除了数字字符以外都为true
    35         System.out.println("0".matches(regex)); // false
    36         System.out.println("9".matches(regex)); // false
    37         System.out.println("a".matches(regex)); // true
    38     }
    39 
    40     private static void demo2() {
    41         String regex = "\\d"; // \代表转义字符,如果想表示\d的话,需要\\d        代表[0-9]单个的数字字符,    
    42         System.out.println("0".matches(regex)); // true
    43         System.out.println("a".matches(regex)); // false
    44         System.out.println("9".matches(regex)); // true
    45     }
    46 
    47     private static void demo1() {
    48         String regex = "..";// 点代表任意字符, 一个点代表一个字符,两个点代表两个字符。
    49         System.out.println("a".matches(regex)); // f
    50         System.out.println("ab".matches(regex)); // t
    51     }

    4.数量词

      

      * A:Greedy 数量词 

      * X? X,一次或一次也没有

      * X* X,零次或多次

      * X+ X,一次或多次

      * X{n} X,恰好 n  

      * X{n,} X,至少 n  

      * X{n,m} X,至少 n 次,但是不超过 m

     1     public static void main(String[] args) {
     2          demo1();
     3          demo2();
     4          demo3();
     5          demo4();
     6          demo5();
     7          demo6();
     8     }
     9 
    10     private static void demo6() {
    11         String regex = "[abc]{5,15}";//范围内的单个字符出现了至少5次,但不超过15次
    12         System.out.println("abcba".matches(regex));                //true
    13         System.out.println("abcbaabcabbabab".matches(regex));    //true
    14         System.out.println("abcb".matches(regex));                //false
    15         System.out.println("abcbaabaabcbaaba".matches(regex));    //false
    16     }
    17 
    18     public static void demo5() {
    19         String regex = "[abc]{5,}";    //范围内的单个字符至少出现了5次,
    20         System.out.println("abcba".matches(regex));            //true
    21         System.out.println("abcbaabcabbabab".matches(regex));//true
    22         System.out.println("abcb".matches(regex));            //false
    23         System.out.println("abcbaaba".matches(regex));        //true
    24     }
    25 
    26     public static void demo4() {
    27         String regex = "[abc]{5}";    //范围内的单个字符 恰好出现了5次,
    28         System.out.println("abcba".matches(regex));                //true
    29         System.out.println("abcbaabcabbabab".matches(regex));    //false
    30         System.out.println("abcb".matches(regex));                //false
    31         System.out.println("abcbaaba".matches(regex));            //false
    32     }
    33 
    34     public static void demo3() {
    35         String regex = "[abc]+";    //范围内的单个符出现了一次或多次
    36         System.out.println("".matches(regex));                //false        一次没出现false
    37         System.out.println("a".matches(regex));                //true
    38         System.out.println("aaaaabbbbccccc".matches(regex));//true
    39     }
    40 
    41     public static void demo2() {
    42         String regex = "[abc]*";    //     范围内的单个字符只出现零次或多次    出现一次也正确
    43         System.out.println("".matches(regex));                //true
    44         System.out.println("abc".matches(regex));            //true
    45         System.out.println("a".matches(regex));                //true
    46         System.out.println("v".matches(regex));                //false
    47     }
    48 
    49     public static void demo1() {
    50         String regex = "[abc]?";    // 范围内的单个字符只出现了一次或一次也没有    空的也是true
    51         System.out.println("a".matches(regex));                //true
    52         System.out.println("b".matches(regex));                //trrue
    53         System.out.println("d".matches(regex));                //false
    54         System.out.println("".matches(regex));                //true
    55     }

    5.正则表达式的分割功能  

    /**
     * *A:正则表达式的分割功能
     *        * String类的功能:public String[] split(String regex)
     *      Split(“.”).表示任意字符。要转义 \\ .
     *     * B:案例演示
     *        * 正则表达式的分割功能
     */

      split()是分割方法

    1 public static void main(String[] args) {
    2         String s = "我们,是,一家人";
    3         String[] arr = s.split(",");
    4         for (int i = 0; i < arr.length; i++) {
    5             System.out.println(arr[i]);
    6         }
    7         System.out.println("++++++++++++");
    8     }

        //输出结果为 我们
                是
                一家人

    6.把给定字符串中的数字排序

         

     1         String str = “989923”’
     2             int[] arr = new int [str.length];   
     5                     for(int i = 0  ; i < arr.length; i++){
     6                           //把字符串转成数字
     7                          arr[i] = Integer.parseInt(str.[i]);
     8                          }    
     9                          //给数字数组排序
    10                      Arrays.sort(arr);    

      

     1 /*
     2          * 1.先把空格切分开
     3          * 2.再把字符串转成字符数组,
     4          * 3.再把字符数组转成int类型,
     5          * 4.再用函数进行排序输出
     6          */
     7         String str = "23 34 73 45 43";
     8         //转成字符数组
     9         String[] arr = str.split(" ");
    10         //声明一个长度和str字符数组一样长度的数组
    11         int[] arr1 = new int[arr.length];
    12         for (int i = 0; i < arr1.length; i++) {
    13             //用函数把字符数组转成int类型的数组
    14             arr1[i] = Integer.parseInt(arr[i]);
    15         }
    16         //用方法把int类型的数组进行排序
    17         Arrays.sort(arr1);
    18         //再用增强for循环输出
    19         for (int i : arr1) {
    20             System.out.println(i);
    21         }
    22         //输出结果为 23 34 43 45 73
    23         
    24         /**
    25          * 如果不把字符数组转成int类型的数组,进行排序的话,系统是按照字典顺序取排序的,
    26          * 比如在字符串中加入100,
    27          * 他的排序会变成  100 23 34 43 45 73
    28          */
     

     

    7.正则表达式的分组和替换功能

     

      (.)\\1

      (.)\\1+    是指匹配多个重复字符

      replaceAll(String regex,String replacement);  是替换功能 把括号内前半部分替换成后半部分

    1                 /* 
    2                  * 分组功能一个点代表匹配一个字符,
    3                  * \\1代表第一组又出现一次     \\2代表第二次又出新一次
    4                  */
    5         String regex = "(.)\\1(.)\\2";
    6         System.out.println("快快乐乐".matches(regex));
    7         
    8         String regex1 = "(..)\\1";
    9         System.out.println("恭喜恭喜".matches(regex1));
     1       //创建一个字符串
     2         String str = "assssddddddddddesdsssss";
     3         //声明一个规则
     4         String regex = "(.)\\1+";
     5         //把字符串转成字符数组,并把规则匹配进去
     6         String [] arr = str.split(regex);
     7         for (String string : arr) {
     8             System.out.println(string);
     9         }
    10
     1 /*
     2          * 1.把点去掉,用替换功能replaceAll
     3          * 2.再用分组功能吧重复字符去掉,只保留一次
     4          */
     5         String str = "我我我我...要..要....要..学学....学编编..编程...程程";
     6         //替换掉点:输出结果为:我我我我要要要学学学编编编程程程
     7         String str1 = str.replaceAll("\\.","");
     8         //使用正则表达式只保留一次重复字符
     9         String str2 = str1.replaceAll("(.)\\1+","$1");//$1代表第一组中的内容
    10         //输出结果为 :我要学编程
    11         System.out.println(str2);

     8.正则获取功能

       pattern类   match类  

     1     //使用Pattern和Mathcher类实现正则表达式的匹配    
     2     Pattern p = Pattern.compile("a*b");
     3     Matcher m = p.matcher("aaaaab");
     4     boolean b = m.matches();
     5     System.out.println(b);
     6     
     7     //我们直接使用的是字符串自己的matches方法进行正则表达式的匹配
     8     System.out.println("aaab".matches("a*b"));
     9         
    10         
    11     }
  • 相关阅读:
    使用Optioanl优雅的处理空值
    综合对比 Kafka、RabbitMQ、RocketMQ、ActiveMQ 四个分布式消息队列
    Nginx 相关介绍
    在Intellij IDEA中使用Debug
    关于Spring的BeanUtils
    MySQL 索引总结
    java中值传递和引用传递
    SQL易错锦集
    Java和SQL取两个字符间的值
    好文章收藏--五分钟理解一致性哈希算法(consistent hashing)
  • 原文地址:https://www.cnblogs.com/xsh726/p/11391010.html
Copyright © 2011-2022 走看看