java正则表达式 Pattern类与Matcher类的用法

一个pattern是一个正则表达式经编译后的表现模式,一个Matcher对象是一个状态机器,它依据Pattern对象作为匹配模式对字符串展开匹配检查。

Pattern类用于创建一个正则表达式,也就是创建一个匹配模式,可以通过Pattern.compile(String regex)简单工厂方法创建一个正则表达式。

Pattern.compile(String regex)

Pattern p = Pattern.compile("\\w+");
p.pattern();


返回结果 \w

表达式“\\w”编译后则为\w,表示匹配包括下划线的任何单词字符。

Pattern.split(CharSequence input)

该方法用于分隔字符串,并返回String[].

Pattern p=Pattern.compile("\\d+"); 
String[] str=p.split("我的QQ是:456456我的电话是:0532214我的邮箱是:[email protected]"); 


返回结果:str[0]="我的QQ是:" str[1]="我的电话是:" str[2]="我的邮箱是:[email protected]" 

 Pattern.matcher(String regex, CharSequence input)

它是一个静态方法,适用于只匹配一次,且匹配全部字符串

Pattern.matches("\\d+","2223");//返回true 
Pattern.matches("\\d+","2223aa");//返回false,需要匹配到所有字符串才能返回true,这里aa不能匹配到 
Pattern.matches("\\d+","22bb23");//返回false,需要匹配到所有字符串才能返回true,这里bb不能匹配到 

Pattern.matcher(String regex)

该方法返回一个Matcher对象,Matcher类的构造方法是私有的,该类的实例只能通过Pattern.matcher(String regex)得到。

Pattern p=Pattern.compile("\\d+"); 
Matcher m=p.matcher("22bb23"); 

Matches.matches()、Matchers.lookingAt()、Matchers.find()

Pattern.matcher(String regex,CharSequence input)只能用于一些简单的匹配操作,Matchers对象提供的方法可以更好的进行匹配。

Matches.matches():对整个字符串进行匹配;

Matchers.lookingAt():对前面的字符串进行匹配,只有匹配到的字符串在最前面才返回true;

Matchers.find():对字符串进行匹配,匹配到的字符串可以在任何位置。

Matcher.start()、Matcher.end()、Matcher.group()

匹配之后可以通过这三种方法得到更详细的信息。

Matcher.start():返回匹配到的字符串在字符串中最开始的索引位置;

Matcher.end():返回匹配到的字符串的最后一个字符在字符串中的索引位置;

Matcher.group():返回匹配到的字符串。

Matcher.appendReplacement(StringBuffer stringBuffer, String replaceContext)

replaceContext为待替换的字符串,并且把从上次替换的位置到这次替换位置之间的字符串拿到,然后加上这次替换后的结果一起追加到StringBuffer里

Matcher.appendTail(StringBuffer sb):sb是一个StringBuffer,这个方法是把最后一次匹配到内容之后的字符串追加到StringBuffer中。

public class RegexMatches {
	private static String REGEX = "a*b";
	private static String INPUT = "aabhxabhxbhx^^!";
	private static String REPLACE = "-";
 
	public static void main(String[] args) {
		// 生成 Pattern 对象并且编译一个简单的正则表达式"a*b"->匹配0到多个的a和b的组合,例aab、ab、b都可匹配到
		Pattern p = Pattern.compile(REGEX);
		// 用 Pattern 类的 matcher() 方法生成一个 Matcher 对象
		Matcher m = p.matcher(INPUT);
		StringBuffer sb = new StringBuffer();
		while (m.find()) {
			//aab、ab、b被替换为-,并且将最后匹配到之前的子串(-hx-hx-)都添加到sb对象中,此时sb为-hx-hx-
			m.appendReplacement(sb, REPLACE);
		}
		//将最后匹配到后面的子串(hx^^!)添加到sb对象中,此时sb为-hx-hx-hx^^!
		m.appendTail(sb);
		System.out.println(sb.toString());
	}
}

猜你喜欢

转载自blog.csdn.net/m0_37637141/article/details/83107293