正则表达式

北城余情 提交于 2020-02-14 20:09:25

正则表达式的概念及演示

概念:“正则表达式”:它是由“一组规则”组成的一个“字符串”,这个规则定义了:对其它字符串进行验证的一些规则。在Java中,我们经常需要验证一些字符串,例如:年龄必须是2位的数字、用户名必须是8位长度 而且只能包含大小写字母、数字等。正则表达式就是用来验证各种字符串的规则。它内部描述了一 些规则,我们可以验证用户输入的字符串是否匹配这个规则。
演示:
下面的程序让用户输入一个QQ号码,我们要验证:
QQ号码必须是5–15位长度
而且必须全部是数字
而且首位不能为0

public class Demo {
    public static void main(String[] args) {
            Scanner sc = new Scanner(System.in);                
            System.out.println("请输入你的QQ号码:");        
            String qq = sc.next();                
            System.out.println(checkQQ2(qq));    
    }    
     //使用正则表达式验证
    private static boolean checkQQ2(String qq){
             String regex = "[1-9]\\d{4,14}";
             //正则表达式        
             return qq.matches(regex);    
    } 
}

上面程序checkQQ2()方法中String类型的变量regex就存储了一个"正则表达式 ",而这个正则表达式就 描述了我们需要的三个规则。matches()方法是String类的一个方法,用于接收一个正则表达式,并 将"本对象"与参数"正则表达式"进行匹配,如果本对象符合正则表达式的规则,则返回true,否则返回 false。
我们接下来就重点看怎样写正则表达式!

正则表达式-字符类

  1. [abc]:代表a或者b,或者c字符中的一个。
  2. [^abc]:代表除a,b,c以外的任何字符。
  3. [a-z]:代表a-z的所有小写字符中的一个。
  4. [A-Z]:代表A-Z的所有大写字符中的一个。
  5. [0-9]:代表0-9之间的某一个数字字符。
  6. [a-zA-Z0-9]:代表a-z或者A-Z或者0-9之间的任意一个字符。
  7. [a-dm-p]:a 到 d 或 m 到 p之间的任意一个字符。

正则表达式-逻辑运算符

  1. &&:并且
  2. | :或者(可以省略)

正则表达式-预定义字符

  1. “.” : 匹配任何字符。
  2. “\d”:任何数字[0-9]的简写;
  3. “\D”:任何非数字[^0-9]的简写;
  4. “\s”: 空白字符:[ \t\n\x0B\f\r] 的简写
  5. “\S”: 非空白字符:[^\s] 的简写
  6. “\w”:单词字符:[a-zA-Z_0-9]的简写
  7. “\W”:非单词字符:[^\w]

正则表达式-数量词

  1. x? : 0次或1次
  2. x* : 0次到多次
  3. x+ : 1次或多次
  4. X{n} : 恰好n次
  5. X{n,} : 至少n次
  6. X{n,m}: n到m次(n和m都是包含的,最少n次,最多m次。)

正则表达式-分组括号()

示例代码:

	public class Demo06 {
    public static void main(String[] args) {
        String str = "DFFDS-FEAGD-FEAFD-ZAFEH-JIJYU";

        //验证str:是一个五位大写字母为一段,一共五段的序列号
        String regex = "([A-Z]{5}-){4}[A-Z]{5}";
        System.out.println(str.matches(regex));
    }
}

如上代码String regex = “([A-Z]{5}-){4}[A-Z]{5}”;括号()中的就是一组,后面跟的{4}表示前面一组恰好出现四次。

String的split方法中使用正则表达式

String类的split()方法原型

public String[] split(String regex);参数regex就是一个正则表达式。可以将当前字符串 中匹配regex正则表达式的符号作为"分隔符"来切割字符串。
示例代码:

public class Demo07 {
    public static void main(String[] args) {
        String row = "张三,,,,,,,,,男,,,,,22";

        String[] split = row.split(",+");//以"符合这个正则表达式的字符串"为"分隔符"进行切割

        System.out.println("数组长度:" + split.length);
        System.out.println(Arrays.toString(split));
    }
}

String类的replaceAll方法中使用正则表达式

String类的replaceAll()方法原型:

public String replaceAll(String regex,String newStr);参数regex就是一个正则表达式。 可以将当前字符串中匹配regex正则表达式的字符串替换为newStr。

public class Demo08 {
    public static void main(String[] args) {
        String str = "jfkw324kjfl32432j432432jfdslr3244432432jfkdsf32432432";

        //需求:将str中所有的数字替换为*
//        String newStr = str.replaceAll("\\d", "*");//每位数字都替换为*
        String newStr = str.replaceAll("\\d+", "*");//每段数字,替换为一个*
        System.out.println(newStr);
    }
}
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!