3个实例学会使用JAVA正则表达式

392 阅读2分钟
原文链接: mp.weixin.qq.com

java.util.regex 包主要包括以下三个类:

Pattern:

pattern对象是一个正则表达式的编译表示。Pattern类没有公共构造方法。要创建一个 Pattern 对象,你必须首先调用其公共静态编译方法,它返回一个 Pattern 对象。该方法接受一个正则表达式作为它的第一个参数。

Matcher:

Matcher对象是对输入字符串进行解释和匹配操作的引擎。与Pattern 类一样,Matcher 也没有公共构造方法。你需要调用 Pattern 对象的 matcher 方法来获得一个 Matcher 对象。

PatternSyntaxException:

PatternSyntaxException 是一个运行时异常类,它表示一个正则表达式模式中的语法错误。

实例1,判断字符串是否满足正则表达式

package com.source.time;import java.util.regex.Pattern;public class Regex {  public static void main(String[] args) {    String content = "如果对你有帮助,关注源码时刻,并转发文章";    //以'如果'开头,以'文章结尾', 中间任意数量任意字符    String regex = "^如果.*文章$";    boolean isMatch = Pattern.matches(regex, content);        System.out.println("字符串是否满足:以'如果'开头,以'文章结尾', 中间任意数量任意字符" + isMatch);  }}

结果

字符串是否满足:以'如果'开头,以'文章结尾', 中间任意数量任意字符true

实例2,判断字符串是否包含正则表达式表示的字符串

package com.source.time;import java.util.regex.Matcher;import java.util.regex.Pattern;public class Regex {  public static void main(String[] args) {    // 按指定模式在字符串查找    String line = "字符串包含了一位数字吗?1";    //    String regex = "\\d";    Pattern pattern = Pattern.compile(regex);    Matcher matcher = pattern.matcher(line);    System.out.println("是否包含一位数字?" + matcher.find());  }}

结果

是否包含一位数字?true

实例1、2的区别在于:1的正则表达式必须表达出整串字符串;而2的正则表达式只需要表达出字符串的子串。

开始实例3之前,先来介绍一个概念,捕获组

使用括号,可以把多个字符组成一个组。捕获组是从左到右来编号的,编号从0开始。

比如表达式(A)(B(C)))

第0组:ABC (第0组是整个正则表达式匹配)

第1组:A

第2组:BC

第3组:C

实例3

package com.source.time;import java.util.regex.Matcher;import java.util.regex.Pattern;public class Regex {  public static void main(String[] args) {    // 按指定模式在字符串查找    String line = "字符串aaabbb123";    //    String regex = "(a{3})(b+(\\d+))";    Pattern pattern = Pattern.compile(regex);    Matcher matcher = pattern.matcher(line);    if (matcher.find()) {      int groupCount = matcher.groupCount();      for (int groupIndex = 0; groupIndex <= groupCount; groupIndex++) {        String format = "分组%d:%s";        System.out.println(String.format(format, groupIndex, matcher.group(groupIndex)));      }    }  }}

结果

分组0:aaabbb123

分组1:aaa

分组2:bbb123

分组3:123

如果对你有帮助,请关注和转发!