Android :正则表达式总结

时间:2022-11-02 19:48:25

 这里面大部分内容来自黑马视频, 弄进来方面以后直接拷贝调用。

常见规则

        A:字符
            x 字符 x。举例:'a'表示字符a
            \\ 反斜线字符。
            \n 新行(换行)符 ('\u000A')
            \r 回车符 ('\u000D')
            
        B:字符类
            [abc] a、b 或 c(简单类)
            [^abc] 任何字符,除了 a、b 或 c(否定)
            [a-zA-Z] a到 z 或 A到 Z,两头的字母包括在内(范围)
            [0-9] 0到9的字符都包括   \d
            
        C:预定义字符类
            . 任何字符。我的就是.字符本身,怎么表示呢?     \.
            \d 数字:[0-9]
            \w 单词字符:[a-zA-Z_0-9]
                在正则表达式里面组成单词的东西必须有这些东西组成

        D:边界匹配器 
            ^ 行的开头  匹配字符串的开头。如,"abc".matches("^a.*");返回true。
            $ 行的结尾 匹配字符串的结尾。如,"abc".matches("abc$");返回true。

            \b 单词边界    举列:1,rex =magic   ; welcome to nowamagic thismagic place!

                                            ,2, rex =\bmagic\b   ;welcome to nowamagic this magic place!  

                                                                     这个正则匹配,必须以m开头,以c为结尾的字符串。

        
                举例:hello world?haha;xixi
            
        E:Greedy 数量词
            X? X,一次或一次也没有
            X* X,零次或多次
            X+ X,一次或多次
            X{n} X,恰好 n 次
            X{n,} X,至少 n 次

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


  常见功能:(分别用的是谁呢?)
        A:判断功能
            String类的public boolean matches(String regex)

        一,校验qq号码.
              *   1: 要求必须是5-15位数字
              *   2: 0不能开头
         

    public static boolean checkQQ(String qq) {       
// String regex ="[1-9][0-9]{4,14}" // 规则。
return qq.matches("[1-9]\\d{4,14}");
}

    二,校验手机号码.
              *   1: 要求11位数字
              *   2: 1开头


      public static boolean checkPhone(String phone) {       
// String regex ="1[385769]\\d{9}" // 规则。
return phone.matches("1[385769]\\d{9}");
}
       三,校验邮箱.
              *   1:aaa@qq.com

                     aaa@sina.com.cn
              *     aaa@126.cn

             

      public static boolean checkMail(String mail) {       
// String regex ="[a-zA-Z_0-9]+@[a-zA-Z_0-9]{2,6}(\\.[a-zA-Z_0-9]{2,3})+" // 规则。
return mail.matches("[a-zA-Z_0-9]+@[a-zA-Z_0-9]{2,6}(\\.[a-zA-Z_0-9]{2,3})+");
}

        B:分割功能
            String类的public String[] split(String regex)

   一:根据一个符号分割。

              // 定义一个字符串
String s1 = "<span style="color:#FF0000;">aa,bb,cc</span>";
// 直接分割
String[] str1Array = s1.split("<span style="color:#FF0000;">,</span>");
for (int x = 0; x < str1Array.length; x++) {
System.out.println(str1Array[x]);
}
结果: <span style="color:#FF0000;">aa
bb
cc
</span><pre name="code" class="java"><span style="color:#000000;">
// 定义一个字符串
String s2 = "<span style="color:#FF0000;">aa.bb.cc</span>";
// 直接分割
String[] str1Array = s1.split("<span style="color:#FF0000;">\\.</span>"); //<span style="color:#FF0000;"> 点分割要转义</span>
for (int x = 0; x < str1Array.length; x++) {
System.out.println(str1Array[x]);
}
结果:<span style="color:#FF0000;"> aa
bb
cc </span></span>
String s3 = "aa    bb                cc";
        String[] str3Array = s3.split(" +"); // 多空格分割
       for (int x = 0; x < str3Array.length; x++) {
            System.out.println(str3Array[x]);
        }


<pre name="code" class="java"><span style="color:#000000;">               结果:<span style="color:#FF0000;"> aa
bb
cc </span></span>

 
//硬盘上的路径,我们应该用\\替代\

        String s4 = "E:\\\\ day14 \\avi";
         String[] str4Array = s4.split("\\\\");
        for (int x = 0; x < str4Array.length; x++) {
            System.out.println(str4Array[x]);
         }
        System.out.println("---------------------");

<span style="color:#FF0000;"></span><pre name="code" class="java"><pre name="code" class="java"><span style="color:#000000;">              结果:<span style="color:#FF0000;"> <span style="font-size:18px;"></span></span></span><pre name="code" class="java"><span style="color:#FF0000;"><span style="color:#000000;"><span style="color:#FF0000;">                      E:</span></span></span>               <pre name="code" class="java"><span style="color:#FF0000;"><span style="color:#000000;"><span style="color:#FF0000;">                      JavaSE</span></span></span>
<span style="color:#FF0000;"><span style="color:#000000;"><span style="color:#FF0000;">                      day14</span></span></span>                 
<span style="color:#FF0000;"><span style="color:#000000;"><span style="color:#FF0000;">                      avi</span></span></span>
 
 
 
 


 

        C:替换功能
            String类的public String replaceAll(String regex,String replacement)

            // 定义一个字符串
String s = "helloqq32312313worfdsf32131232132java";

// 我要去除所有的数字,用*给替换掉
// String regex = "\\d+";
// String regex = "\\d";
//String ss = "*";


// 直接把数字干掉
String regex = "\\d+";
String ss = "";

String result = s.replaceAll(regex, ss);
System.out.println(result);


        D:获取功能
            Pattern和Matcher
                Pattern p = Pattern.compile("a*b");
                Matcher m = p.matcher("aaaaab");
                
                find():查找存不存在
                group():获取刚才查找过的数据

            // 模式和匹配器的典型调用顺序
// 把正则表达式编译成模式对象
Pattern p = Pattern.compile("a*b");
// 通过模式对象得到匹配器对象,这个时候需要的是被匹配的字符串
Matcher m = p.matcher("aaaaab");
// 调用匹配器对象的功能
boolean b = m.matches();
System.out.println(b);

//这个是判断功能,但是如果做判断,这样做就有点麻烦了,我们直接用字符串的方法做
String s = "aaaaab";
String regex = "a*b";
boolean bb = s.matches(regex);
System.out.println(bb);
}
                * 获取功能:
                * 获取下面这个字符串中由三个字符组成的单词
                * da jia ting wo shuo,jin tian yao xia yu,bu shang wan zi xi,gao xing bu?
              // 定义字符串
String s = "da jia ting wo shuo,jin tian yao xia yu,bu shang wan zi xi,gao xing bu?";
// 规则
String regex = "\\b\\w{3}\\b";

// 把规则编译成模式对象
Pattern p = Pattern.compile(regex);
// 通过模式对象得到匹配器对象
Matcher m = p.matcher(s);
// 调用匹配器对象的功能
// 通过find方法就是查找有没有满足条件的子串
// public boolean find()
// boolean flag = m.find();
// System.out.println(flag);
// // 如何得到值呢?
// // public String group()
// String ss = m.group();
// System.out.println(ss);
//
// // 再来一次
// flag = m.find();
// System.out.println(flag);
// ss = m.group();
// System.out.println(ss);

while (m.find()) {
System.out.println(m.group());
}

// 注意:一定要先find(),然后才能group()
// IllegalStateException: No match found
// String ss = m.group();
// System.out.println(ss);




    (4)案例
        A:判断电话号码和邮箱
        B:按照不同的规则分割数据
        C:把论坛中的数字替换为*
        D:获取字符串中由3个字符组成的单词

        E:判断密码是不是由6-15位的字母和数字组成 ,且不能全是字母会全是数字,

/**
* 判断密码是不是由6-15位的字母和数字组成 ,且不能全是字母会全是数字,
* @author admin
*
*/
public class dadasdasdasd {
public static void main(String[] args) {
String s = "a111addaaaaaaaaaa";
String regex = "([0-9](?=[0-9]*?[a-zA-Z])\\w{5,14})|([a-zA-Z](?=[a-zA-Z]*?[0-9])\\w{5,14})" ;

System.out.println(s.matches(regex));
}
}