【Java 经常使用类】java.util.regex包(1)Pattern、Matcher的经常使用方法




前言

我上一篇写了正则表达式的总结,这一篇讲一下Java中Pattern和Matcher类的使用。java

正则表达式总结请移步:【正则表达式】(0)总结web

大纲

Pattern :正则表达式的编译表示形式。正则表达式

主要就是用来写正则表达式。
在这里插入图片描述svg

public final class Patternextends Object implements Serializable


Matcher 经过解释 Pattern 对 character sequence 执行匹配操做的引擎。spa

看名字也知道了,匹配器主要用来匹配。
在这里插入图片描述.net

public final class Matcher extends Object implements MatchResult

2、使用

1.字段(Pattern类)

int caseInsensitive = Pattern.CASE_INSENSITIVE; // 忽视大小写,使用Pattern的compile(String regex, int flags) 方法时使用。

2.构造器(Pattern类和Matcher类)

Pattern类和Matcher类都没有构造器。code

Pattern类有静态方法,直接调用静态方法便可。xml

Matcher对象是经过Pattern类的matcher(CharSequence input) 进行建立的。能够看下面 3.5建立匹配器对象

3.经常使用方法(Pattern类)

3.1 建立正则编译到模式中

将给定的正则表达式编译到模式中。blog

  • compile(String regex)
  • 也就是建立一个正则表达式。
private static Pattern c = Pattern.compile("[a-z]+"); // 建立正则表达式编译到模式中
3.2 建立正则编译到模式中并给定标志

将给定的正则表达式编译到具备给定标志的模式中。

  • compile(String regex, int flags)
  • 也就是建立一个正则表达式。同时给定一个标志,如:忽视大小写。
private static Pattern c = Pattern.compile("[a-z]+", Pattern.CASE_INSENSITIVE);
3.3 模式的字符串形式

返回匹配器的字符串表示形式。

  • toString()
  • 返回模式的字符串形式,也就是正则。
/** 在使用正则表达式时,利用好其预编译功能,能够有效加快正则匹配速度 */
private static Pattern p = Pattern.compile("[a-z]+");	
public static void main(String[] args) {
    String s = p.toString();
    System.out.println(s); // [a-z]+
}
3.4 字符串匹配

编译给定正则表达式并尝试将给定输入与其匹配。

  • matches(String regex, CharSequence input)
  • 就是给一个字符串形式的正则表达式,同时给一个须要判断是否匹配的字符串。匹配时返回true,不匹配返回false
boolean m = Pattern.matches("[a-z]+", "hello");
System.out.println(m); // true
boolean m2 = Pattern.matches("[a-z]+", "123");
System.out.println(m2); // false
3.5 建立匹配器

建立匹配给定输入与此模式的匹配器。

  • matcher(CharSequence input)
  • 建立一个匹配器,同时给定须要匹配器匹配的字符。
/** 在使用正则表达式时,利用好其预编译功能,能够有效加快正则匹配速度 */
private static Pattern p = Pattern.compile("[a-z]+");
public static void main(String[] args) {
    Matcher hello = p.matcher("hello"); // 获取到一个匹配器
}

4.经常使用方法(Matcher类)

4.1 字符串匹配

尝试将整个区域与模式匹配。

  • matches()
  • 同上面 3.1 字符串匹配 同样。
    只不过3.1调用的是Pattern的静态方法matches(),而这里调用的是Matcher对象的matches方法。
/** 在使用正则表达式时,利用好其预编译功能,能够有效加快正则匹配速度 */
private static Pattern p = Pattern.compile("[a-z]+");
public static void main(String[] args) {
	Matcher matcher = p.matcher("hello");
	boolean m = matcher.matches();
	System.out.println(m); // true

	Matcher matcher2 = p.matcher("hello 123");
	boolean m2 = matcher2.matches();
	System.out.println(m2); // false
}
4.2 捕获组数量

返回此匹配器模式中的捕获组数。

  • group(int group)
  • 正则表达式中,正则表达式会左侧开始,每出现一个左括号"("记作第1个组,以此类推。
private static Pattern p = Pattern.compile("(([a-z]).)");
    public static void main(String[] args) {
        Matcher matcher = p.matcher("a-b-c-d-e-");
        int count = matcher.groupCount();
        System.out.println(count);
    }
4.3 正则替换
  • replaceFirst(String replacement)
  • 替换第一个匹配的字符串
  • replaceAll(String replacement)
  • 替换全部匹配的字符串
private static Pattern p = Pattern.compile("(([a-z]).)");
    public static void main(String[] args) {
        Matcher matcher = p.matcher("a-b-c-d-e-");
        String s = matcher.replaceFirst("z-"); // 替换第一个匹配的字符串
        System.out.println(s); // z-b-c-d-e-
        String all = matcher.replaceAll("z-"); // 替换全部匹配的字符串
        System.out.println(all); // z-z-z-z-z-
    }
4.4 查找获取匹配

尝试查找与该模式匹配的输入序列的下一个子序列。

  • find()
  • 尝试匹配下一个匹配的字符串,就是查找字符串中匹配的子字符串

返回由之前匹配操做所匹配的输入子序列。

  • group()
  • 返回以前匹配的子字符串,就是获取字符串中匹配的子字符串
/** 在使用正则表达式时,利用好其预编译功能,能够有效加快正则匹配速度 */
    private static Pattern p = Pattern.compile("[a-z].");

    public static void main(String[] args) {
        Matcher matcher = p.matcher("a-b-c-d-e-");
        // 一个个匹配
        boolean f = matcher.find();
        String g = matcher.group();
        System.out.println("是否有匹配的子字符串:"+f+"\n匹配的结果为:"+g);

        // 循环匹配
        while (matcher.find()) {
            String group = matcher.group();
            System.out.println(group);
        }
    }

相关连接

【Java 经常使用类】大纲