正则表达

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     }
原文地址:https://www.cnblogs.com/xsh726/p/11391010.html