正则表达式

语法



java.util.regex

public class Main {
    public static void main(String[] args) {
        Pattern pattern = Pattern.compile("(\\d{3,4})\\-(\\d{7,8})");
        pattern.matcher("010-12345678").matches(); // true
        pattern.matcher("021-123456").matches(); // false
        pattern.matcher("022#1234567").matches(); // false
        // 获得Matcher对象:
        Matcher matcher = pattern.matcher("010-12345678");
        if (matcher.matches()) {
            String whole = matcher.group(0); // "010-12345678", 0表示匹配的整个字符串
            String area = matcher.group(1); // "010", 1表示匹配的第1个子串
            String tel = matcher.group(2); // "12345678", 2表示匹配的第2个子串
            System.out.println(area);
            System.out.println(tel);
        }
    }
}

贪婪匹配和非贪婪匹配

  • 正则默认的是贪婪匹配,会尽可能多的向后匹配
public class Main {
    public static void main(String[] args) {
        Pattern pattern = Pattern.compile("(\\d+)(0*)");
        Matcher matcher = pattern.matcher("1230000");
        if (matcher.matches()) {
            System.out.println("group1=" + matcher.group(1)); // "1230000"
            System.out.println("group2=" + matcher.group(2)); // ""
        }
    }
}
  • 在规则后面加上 ? 就会变成非贪婪匹配,尽可能少的匹配
public class Main {
    public static void main(String[] args) {
        Pattern pattern = Pattern.compile("(\\d+?)(0*)");
        Matcher matcher = pattern.matcher("1230000");
        if (matcher.matches()) {
            System.out.println("group1=" + matcher.group(1)); // "123"
            System.out.println("group2=" + matcher.group(2)); // "0000"
        }
    }
}

匹配字符串

  • 先用正则表达式字符串构建一个Pattern对象,构建时可以设置一个或多个标志位

  • 获取Matcher对象,通过matchers()方法判断是否匹配成功

找出多个匹配

  • 通过Matcher的find()方法来查找下一个匹配的子串
  • 通过start() end()来获取字串的下标
  • 也可以通过不带参数的group()来获取字串
  • 优雅的方式,通过results()方法获得一个Stream

用分隔符来分割

替换匹配



posted @ 2022-11-10 15:47  扣jio大汉子  阅读(21)  评论(0)    收藏  举报