package com.gaoxinfu.demo.regular.expression;
import java.util.regex.Pattern;
import org.junit.Test;
public class PatternDemo {
/**
* pattern()
* 返回正则表达式的字符串形式,其实就是返回Pattern.complile(String regex)的regex参数
* @Author: gaoxinfu
* @Time:2019年1月13日 下午5:23:50
*/
@Test
public void patternTest() {
Pattern p=Pattern.compile("\\w+");
//返回 \w+
System.out.println(p.pattern());
}
/**
* Pattern有一个split(CharSequence input)方法,
* 用于分隔字符串,并返回一个String[],
* 其中String.split(Stringregex)就是通过Pattern.split(CharSequence input)来实现的.
* @Author: gaoxinfu
* @Time:2019年1月13日 下午5:33:18
*/
@Test
public void splitTest() {
Pattern p=Pattern.compile("\\d+");
String[] strs=p.split("AAA456456VVV0532214DDD");
for (String str:strs) {
System.out.println(str);
}
// 结果:str[0]=" AAA " str[1]=" VVV " str[2]=" DDD
}
/**
* 该方法是一个静态方法,用于快速匹配字符串,
* 该方法适合用于只匹配一次,且匹配全部字符串.
* @Author: gaoxinfu
* @Time:2019年1月13日 下午5:47:35
*/
@Test
public void matcherTest() {
boolean flag1= Pattern.matches("[a-z]{2}+","aa");
//返回true
System.out.println(flag1);
boolean flag2=Pattern.matches("[a-z]{2}","A2");
//返回false,需要匹配到所有字符串才能返回true
System.out.println(flag2);
}
}
通过上面
Pattern.matches("[a-z]{2}",“A2”);类的源码
public static boolean matches(String regex, CharSequence input) {
Pattern p = Pattern.compile(regex);
Matcher m = p.matcher(input);
return m.matches();
}
会发现实际上是Pattern和Matcher 的两个类的一个结合
如果你只是匹配一次,可以用直接用下面的方法
public static boolean matches(String regex, CharSequence input)
如果多个地方调用建议
自己声明
Pattern p = Pattern.compile(regex);
然后多个地方调用下面的匹配方法
Matcher m = p.matcher(input);