Java程序设计 正则表达式快速入门

891 阅读3分钟

这是我参与2022首次更文挑战的第12天,活动详情查看:2022首次更文挑战

Java程序设计 正则表达式快速入门

利用正则表达式可以执行更加复杂的字符串的拆分、验证、替换等操作

不使用正则表达式验证字符串

public class Hello {
    public static void main(String[] args) {
        String s="123a";
        boolean flag = true;
        //将字符串转换为字符数组
        char c[] = s.toCharArray();
        for(int i=0;i<c.length;i++) {
            if (c[i] < '0' || c[i] > '9') {
                flag = false;
                break;
            }
        }
        if(flag){
            System.out.println("字符串由数字构成");
        }else {
            System.out.println("字符串不是由数字构成");
        }
    }
}

image-20220127172035345

使用正则表达式验证字符串

import java.util.regex.Pattern;
public class Hello {
    public static void main(String[] args) {
        String s="123456";
        if(Pattern.compile("[0-9]+").matcher(s).matches()){
            System.out.println("字符串由数字构成");
        }else {
            System.out.println("字符串不是由数字构成");
        }
    }
}

image-20220127172341337

“[0-9]+”是正则表达式的匹配字符,表示由1个以上的数字组成

正则表达式操作类需要通过Pattern和Matcher两个类完成操作的

Pattern类的主要作用是进行正则规范

Matcher类主要是执行规范,验证一个字符串是否符合其规范

规范作用
\\表示反斜线(\)字符
\t表示制表符
\n表示换行
[abc]字符a、b、c
[^abc]除了a、b、c之外的任意字符
[a-zA-Z0-9]表示由字母、数字组成
\d表示数字
\D表示非数字
\w表示字母、数字、下划线
\W表示非字母、数字、下划线
\s表示所有空白字符
\S表示所有非空白字符
^行的开头
$行的结尾
_匹配除换行符之外的任意字符

数量

规范作用
X必须出现一次
X?可以出现0次、1次
X*可以出现0次、1次、多次
X+可以出现1次、多次
X{n}必须出现n次
X{n.}必须出现n次以上
X{n,m}必须出现n-m次

逻辑运算符

规范作用
XYX规范后跟着Y规范
X|YX规范或Y规范
(X)作为一个捕获组规范

Pattern类的常用方法

方法作用
public static Pattern compile(String regex)指定正则表达式规则
public Matcher matcher(CharSequence input)返回Matcher类实例
public String[] split(CharSequence input)字符串拆分

Matcher类的常用方法

方法作用
public boolean matches()执行验证
public String replaceAll(String replacement)字符串替换

验证日期

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class Hello {
    public static void main(String[] args) {
        String s="2023年01月23日";
        if(Pattern.compile("\\d{4}年\\d{2}月\\d{2}日").matcher(s).matches()){
            System.out.println("是日期");
        }else {
            System.out.println("不是日期");
        }
//        方式二
        Pattern p = Pattern.compile("\\d{4}年\\d{2}月\\d{2}日");
        Matcher m = p.matcher(s);
        if(m.matches()){
            System.out.println("是日期");
        }else {
            System.out.println("不是日期");
        }
    }
}

image-20220127203803559

使用正则表达式规则替换字符

除了数字其他全部替换成+

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class Hello {
    public static void main(String[] args) {
         String s ="ghj45fghj5g2t66h2g5g5h55fg8f7g7";
        Pattern p = Pattern.compile("\\D+");
        Matcher m = p.matcher(s);
        String a = m.replaceAll("+");
        System.out.println(a);
    }
}

image-20220127204552837

String类的正则支持方法

方法作用
public boolean matches(String regex)字符串匹配
public String replaceAll(String regex,String replacement)字符串替换
public String[] splic(String regex)字符串拆分
public class Hello {
    public static void main(String[] args) {
         String s ="ghj45fghj5g2t66h2g5g5h55fg8f7g7";
        String a = s.replaceAll("\\D+","+");
        System.out.println(a);
        String b[] = s.split("5+");
        for(String x : b){
            System.out.print(x+" ");
        }
    }
}

image-20220127205450773