[ Java ] 最通俗易懂的正则表达式讲解

文章目录

    • 正则标记
      • 1、字符匹配
      • 2、字符集匹配
      • 3、简化字符集
      • 4、边界匹配
      • 5、数量表示
    • String 对正则的支持
    • regex 包支持

正则标记


java.util.regex包中提供有Pattern程序类,在这个类中定义了所有受支持的正则标记。

1、字符匹配

匹配单个字符

  • 任意字符:表示由任意字符组成
  • \\:匹配\
  • \n:匹配换行
  • \t:匹配制表符
String str = "a";
String regex = "a";
System.out.println(str.matches(regex)); // true

2、字符集匹配

匹配单个字符

  • [abc]:表示可能是字母a、b、c中的任意一个
  • [^abc]:表示不是由字母a、b、c中的任意一个
  • [a-zA-Z]:表示由一个任意字母所组成,不区分大小写;
  • [0-9]:表示由一位数字所组成;
String str = "a";
String regex = "[abc]";
System.out.println(str.matches(regex)); // true

3、简化字符集

  • .:表示任意的一个字符
  • \d: 等价于[0-9]范围
  • \D:等价于[^0-9]范围
  • \s: 匹配任意的一位空格,可能是空格、换行、制表符
  • \S:匹配任意的非空格数据
  • \w:匹配字母、数字、下划线,等价于[a-zA-Z_0-9]
  • \W:匹配非字母、数字、下划线,等价于[^a-zA-Z_0-9]

4、边界匹配

  • ^:匹配边界开始
  • $:匹配边界结束

5、数量表示

默认情况下只有添加上了数量单位才可以匹配多位字符

  • 表达式?:该正则可以出现 0 次或 1 次
  • 表达式*:该正则可以出现 0 次,1 次或多次
  • 表达式+:该正则可以出现 1 次或多次
  • 表达式{n}:表达式的长度正好为n次;
  • 表达式{n}:表达式的长度为n 次以上;。
  • 表达式{n,m}:表达式的长度在n~m
String str = "abc";
String regex = "\\w{3,}";
System.out.println(str.matches(regex)); // true

String 对正则的支持


在进行正则表达式大部分处理的情况下都会基于String类来完成,String类中提供有如下方法支持正则

方法名称 描述
public boolean matches(String regex) 将指定字符串进行正则判断
public String replaceAll(String regex, String replacement) 替换全部
public String replaceFirst(String regex, String replacement) 替换首个
public String[] split(String regex) 正则拆分
public String[] split(String regex, int limit) 正则拆分
  • 去除所有非字母数字
String str = "SKF,.QW/QC8C$Q23$$#()ewfWEF4";
String regex = "[^a-zA-Z0-9]+";
System.out.println(str.replaceAll(regex,""));
 // SKFQWQC8CQ23ewfWEF4
  • 以数字拆分
String str = "b1e82fb28bodb98x3b2xkjo2hxdjsb";
String regex = "\\d+";
String[] result = str.split(regex);
System.out.println(Arrays.toString(result));
// [b, e, fb, bodb, x, b, xkjo, hxdjsb]
  • 小数判断
String str = "100.0";
String regex = "\\d+(\\.\\d+)?";
System.out.println(str.matches(regex));
  • 日期判断
String str = "1998-10-20";
String regex = "\\d{4}-\\d{2}-\\d{2}";
System.out.println(str.matches(regex));

regex 包支持


java.util.regex开发包,如果不是进行一些更为复杂的正则处理是很难使用到的,而String类所提供的功能只适合于正则的基本操作。

  • Pattern类,提供有正则表达式的编译处理支持

  • Matcher类,实现了正则匹配的处理类,这个类的对象实例化依靠Pattern类完成

  • 字符串拆分

String str = "b1e82fb28bodb98x3b2xkjo2hxdjsb";
String regex = "\\d+";

// `compile` 编译一个正则表达式为`Pattern`对象
Pattern pat = Pattern.compile(regex);
String[] result = pat.split(str);
System.out.println(Arrays.toString(result));
// [b, e, fb, bodb, x, b, xkjo, hxdjsb]
  • 字符串匹配
String str = "11110111";
String regex = "\\d+";
Pattern pat = Pattern.compile(regex);
Matcher mat = pat.matcher(str);
System.out.println(mat.matches());
  • 取出#{内容}标记的所有内容
String str = "insert into dept(deptno,dname,loc) values (#{deptno},#{dname},#{loc})";
String regex = "#\\{\\w+\\}";
Pattern pat = Pattern.compile(regex);

// `matcher` 用`Pattern`对象匹配一个字符串,返回匹配结果
Matcher mat = pat.matcher(str);

while (mat.find()){
   System.out.println(mat.group(0).replaceAll("#|\\{|\\}",""));
}

在这里插入图片描述

你可能感兴趣的:(Java)