java里的正则表达式——Pattern类和Matcher类

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

指定为字符串的正则表达式必须首先被编译为此类的实例。然后,可将得到的模式用于创建 Matcher 对象,依照正则表达式,该对象可以与任意字符序列匹配。执行匹配所涉及的所有状态都驻留在匹配器中,所以多个匹配器可以共享同一模式。

因此,典型的调用顺序是

 Pattern p = Pattern.compile("a*b");
 Matcher m = p.matcher("aaaaab");
 boolean b = m.matches();

在仅使用一次正则表达式时,可以方便地通过此类定义 matches 方法。此方法编译表达式并在单个调用中将输入序列与其匹配。语句

 boolean b = Pattern.matches("a*b", "aaaaab");

等效于上面的三个语句,尽管对于重复的匹配而言它效率不高,因为它不允许重用已编译的模式。 

 

 

java里的正则表达式——Pattern类和Matcher类

 接下来就进行测试:

(1)、对字符串[email protected]@[email protected] hadvjk进行匹配。

matches() 是对整个字符串去判断。

find() 是一个一个字符的去匹配,出现符合的就返回true

其中,reset() 是对find()方法中 匹配器中的指针重置回到字符串的第0位

package cn.liu.regularexpresssion;

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

public class Demo01 {
	public static void main(String[] args) {
		String str = "[email protected]@[email protected] hadvjk";
		
		//表达式对象
		Pattern p = Pattern.compile("\\w+");
		//创建Matcher对象
		Matcher m = p.matcher(str);
		
		//匹配的整个字符序列
		boolean oo = m.matches();//整个字符串不符合要求
		System.out.println(oo);

		m.reset();//重置匹配器
		
		//一个一个的去匹配查看字符串是否有符合
		boolean aa = m.find();
		String str1 = m.group();
		System.out.println(aa+"---->"+str1);

		boolean bb = m.find();//此时find() 匹配器指针走到第一个@
		System.out.println(bb+"---->"+m.group());
		  
		System.out.println("-------------------");
		
		//循环输出所有符合规则的字符串
		m.reset();//重置匹配器
		while(m.find()) {
			System.out.println(m.group());
		}
	}
}

java里的正则表达式——Pattern类和Matcher类 

(2)来看一看group()函数

其中正则表达式:([0-9][a-z]+)(@)  是匹配 第一位是数字,后面有若干的字母,最后一位是@的字符串形式。

首先:m.group()和m.group(0)是等价的。

其次:m.group()是第一次m.find()所匹配的内容,m.group(1)是m.group()所符合表达式([0-9][a-z]+)的内容;m.group()是m.group()符合表达式(@)的内容。m.group()则出现错,因为没有第三部分表达式。

package cn.liu.regularexpresssion;

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

public class Demo02 {
	public static void main(String[] args) {
		String str = "[email protected]@jnb_j22jj";
		Pattern p = Pattern.compile("([0-9][a-z]+)(@)");
		Matcher m = p.matcher(str);
		
		while(m.find()) {
			System.out.print(m.group()+",");
		}
		
		System.out.println();
		
		m.reset();
	    m.find();
		System.out.print(m.group()+",");
		System.out.print(m.group(0)+",");
		System.out.print(m.group(1)+",");
		System.out.print(m.group(2)+",");
	}
}

java里的正则表达式——Pattern类和Matcher类

(3)、替换

package cn.liu.regularexpresssion;

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

public class Demo03 {
	public static void main(String[] args) {
		//表达式对象
		Pattern p = Pattern.compile("\\w+");
		//创建Matcher对象
		Matcher m = p.matcher("[email protected]@[email protected] hadvjk");
		
		//替换
		System.out.println(m.replaceAll("#"));
	}
}

 java里的正则表达式——Pattern类和Matcher类

(4)、切割

package cn.liu.regularexpresssion;

import java.util.Arrays;

public class Demo04 {
	public static void main(String[] args) {
		String str = "[email protected]@[email protected] hadvjk";
		String[] arr1 = str.split("@");//按@切割
		String[] arr2 = str.split("\\w+");//按若干个字母切割
		System.out.println(Arrays.toString(arr1));
		System.out.println(Arrays.toString(arr2));
	}
}

 java里的正则表达式——Pattern类和Matcher类

 

如果对正则表达式规则不熟悉,可以看看其规则:

https://blog.csdn.net/qq_40301026/article/details/89042294

 

相关文章: