【JavaSE_学习笔记】正则表达式

【JavaSE_学习笔记】正则表达式

正则表达式常用的语法:
A:字符

符号 意义 注意事项
x 字符 x :任意的字符
\\ 反斜线字符 在代码中书写正则表达式:——>用两个\代表一个反斜线
\t 制表符 (‘\u0009’)
\n 新行(换行)符 (‘\u000A’) IO流中要写入换行符号:windows “\r\n”
\r 回车符 (‘\u000D’)

B:字符类

符号 意义
[abc] a、b 或 c(简单类)
[^abc] 任何字符,除了 a、b 或 c(否定)
[a-zA-Z] a 到 z 或 A 到 Z,两头的字母包括在内(范围) :当前字母大小均可

C:预定义字符类

符号 意义 注意事项
. 任何字符 邮箱里面:如果本身就是.,那么在写正在表达式的时候,.将当前.转义
\d 数字:[0-9] \d在正则表达式应用的时候:[0-9]—>\d
\w 单词字符:[a-zA-Z_0-9] 简单一些字符串,单词字符(规则:数字或者字母)

D:边界匹配器

符号 意义
^ 行的开头
$ 行的结尾
\b 单词边界

E:Greedy 数量词

符号 意义
X? X,一次或一次也没有
X* X,零次或多次
X+ X,一次或多次
X{n} X,恰好 n 次
X{n,} X,至少 n 次
X{n,m} X,至少 n 次,但是不超过 m 次

举例:
1.校验QQ号码

import java.util.Scanner;

/**
 * 需求:校验一个QQ号码
 *      定义一个规则:1)由5到10为组成的数字
 *                2)不能以0开头  
 *  分析:
 *      1)键盘录入一个QQ号码,使用字符串接收
 *      2)定义一个校验QQ的功能
 *      3)在main()中调用返回boolean类型
 * @author Apple
 */
public class RegexDemo2 {

    public static void main(String[] args) {

        //创建键盘了录入对象
        Scanner sc = new Scanner(System.in) ;

        //录入并接收数据
        System.out.println("请您输入QQ号码: ");
        String QQ = sc.nextLine() ;
        boolean flag = checkQQ(QQ) ;
        System.out.println("flag: "+flag);
    }

    public static boolean checkQQ(String qq){
        /*//定义正则规则
        String regex = "[1-9][0-9]{4,9}" ;

        //public boolean matches(String regex)告知此字符串是否匹配给定的正则表达式。 
        boolean flag = qq.matches(regex) ;
        return flag ;*/

        //直接返回
        return qq.matches("[1-9]\\d{4,9}");
    }
}

2.校验邮箱

import java.util.Scanner;

/**
 * 需求:校验邮箱:
 *      QQ邮箱:
 *          [email protected]
 *          [email protected]
 *          [email protected]
 *          [email protected]
 *          [email protected]
 *          [email protected]....
 * 分析:1)键盘录入邮箱
 *      2)定义正则规则
 *      3)使用String中的特有功能校验
 *      4)输出即可
 * @author Apple
 */
public class RegexTest {
    public static void main(String[] args) {

        //创建键盘录入对象
        Scanner sc = new Scanner(System.in) ;

        //录入并接收
        System.out.println("请您输入一个邮箱:");
        String email = sc.nextLine() ;

        //定义正则规则:本身就是.-->\.--->\\.
//      String regex = "[a-zA-Z_0-9]+@[a-zA-Z_0-9]{2,6}(\\.[a-zA-Z]{2,3})+" ;
        String regex = "\\w+@\\w{2,6}(\\.[a-zA-Z]{2,3})+" ;

        //校验
        boolean flag = email.matches(regex) ;
        System.out.println("flag:"+flag);
    }
}

String中与正则表达式有关的方法:
  public String[] split(String regex)根据给定正则表达式的匹配拆分此字符串,返回值类型是一个字符串数组类型
举例:

public class RegexDemo2 {

    public static void main(String[] args) {

        //定义个字符串
        String str1 = "aa,bb,cc" ;
        //使用分割功能
        String[] strArray1 = str1.split(",") ;
        //遍历字符串数组
        for(int x = 0 ; x < strArray1.length; x ++){
            System.out.println(strArray1[x]);
        }

        System.out.println("------------------");

        //字符串:
        String str2 = "aa       bb                    cc" ;
        //使用切割功能:
        String[] strArray2 = str2.split(" +") ;
        for(int x = 0 ; x out.println(strArray2[x]);
        }

        System.out.println("--------------------");

        String str3 = "aa.bb.cc" ;
        //分割功能
        String[] strArray3 = str3.split("\\.") ;
        for(int x =0 ; xout.println(strArray3[x]);
        }

        //硬盘上的路径表现形式:用两个反斜线代表一个反斜线
        //E:\\JavaSE\\JavaCode\\day13
        String str4 = "E:\\JavaSE\\JavaCode\\day13" ;
        //使用分割功能
        String[] strArray4 = str4.split("\\\\") ;
        for(int x = 0 ; x out.println(strArray4[x]);
        }
    }
}

  public String replaceAll(String regex,String replacement)
    使用给定的 replacement 替换此字符串所有匹配给定的正则表达式的子字符串
举例:

public class RegexDemo3 {

    public static void main(String[] args) {

        //定义一个字符串:
        String str = "helloword123JavaSE45678Javaweb" ;

        //需求:让当前这个字符串中的数字不显示出来
        //定义当前大串中数字定义正则规则 
//      String regex = "[0-9]+" ;
        String regex = "\\d+" ;
        String s = "*" ;

        //public String replaceAll(String regex,String replacement)
        String result = str.replaceAll(regex, s) ;
        System.out.println("result:"+result);
    }
}

模式与匹配器:

import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class RegexDemo4 {

    public static void main(String[] args) {
        //public static Pattern compile(String regex)将给定的正则表达式编译成一个模式对象
        //1)获取模式对象(通过正则规则)
        Pattern p = Pattern.compile("a*b") ;
        //2)通过模式获取匹配器对象,(将一个字符串类型的数据)
        Matcher m = p.matcher("aaaaaab") ;
        //3)调用Match(匹配器类)中的:public boolean matches():判断当前用户录入的字符串是否和当前的正则规则匹配
        boolean flag = m.matches() ;
        System.out.println("flag:"+flag);

        System.out.println("----------------------------");

        //上述写法非常麻烦,要获取模式对象Pattern还要获取匹配器对象:Matcher,然后通过matches()方法返回一个结果
        //以后可以使用下面这种格式

        //定义一个正则规则
        String regex = "a*b" ;

        //指定某一个字符串
        String str = "aaaaaaab" ;

        //使用String类的功能
        //使用当前给定的字符串调用public boolean matchers(String regex)
        boolean flag2 = str.matches(regex) ;
        System.out.println("flag2: "+flag2);
    }
}

你可能感兴趣的:(学习笔记)