一.Pattern的用法:
1. 在java中Pattern对象的获取是通过Pattern pattern = Pattern.complile(regex),而不是通过new出来的,因为Pattern的构 造函数是private类型的。Pattern类用于创建一个正则表达式,也可以说是创建一个匹配模式,可以通过两个静态方法创建:compile(String regex)和compile(String regex,int flags),其中regex是正则表达式,flags为可选模式(如 Pattern.CASE_INSENSITIVE 忽略大小写)
Pattern pattern = Pattern.compile("Java");
System.out.println(pattern.pattern());//返回此模式的正则表达式为Java
2.Pattern类还有两个根据匹配模式拆分输入序列的方法:split(CharSequence input) 和split(CharSequence input, int limit),其中limit为返回元素的个数。
Pattern pattern = Pattern.compile("Java");
String test="123Java456Java789Java";
String[] result = pattern.split(test);
for(String s : result) {
System.out.println(s);
}
PS:如果查看String类的源码会发现,String中的split函数( 例如: "abc,def".split(',') )本质也是采用的pattern.split(",")
3. Pattern类自带一个静态匹配方法matches(String regex, CharSequence input),但只能进行全字符串匹配并且只能返回是否匹配上的boolean值
String test1 = "Java";
String test2 = "Java123456";
System.out.println(Pattern.matches("Java",test1));//返回true
System.out.println(Pattern.matches("Java",test2));//返回false
二.Mather的用法:
1.Pattern类中的matcher(CharSequence input)方法会返回一个Matcher对象。 Matcher类提供了对正则表达式的分组支持,以及对正则表达式的多次匹配支持, 要想得到更丰富的正则匹配操作,那就需要将Pattern与Matcher联合使用。
Pattern pattern = Pattern.compile("Java");
Matcher matcher = pattern.matcher();
2.Matcher类提供了三个返回boolean值的匹配方法:
find可以对任意位置字符串匹配,其中start为起始查找索引值
matches:整个匹配,只有整个字符序列完全匹配成功,才返回True,否则返回False。
LookingAt:部分匹配,总是从第一个字符进行匹配,匹配成功了不再继续匹配,匹配失败了,也不继续匹配。
find(index):部分匹配,从当前位置开始匹配,找到一个匹配的子串,将移动下次匹配的位置。
reset:给当前的Matcher对象配上个新的目标,目标是就该方法的参数;如果不给参数,reset会把Matcher设到当前字符串的开始
Pattern pattern = Pattern.compile("Java");
String test1 = "Java";
String test2 = "Java1234";
String test3 = "1234Java";
Matcher matcher = pattern.matcher(test1);
System.out.println(matcher.matches());//返回true
matcher = pattern.matcher(test2);
System.out.println(matcher.matches());//返回false
matcher = pattern.matcher(test2);
System.out.println(matcher.lookingAt())://返回true
matcher = pattern.matcher(test3);
System.out.println(matcher.lookingAt());//返回false
matcher = pattern.matcher(test1);
System.out.println(matcher.find());//返回true
matcher = pattern.matcher(test2);
System.out.println(matcher.find());//返回true
matcher = pattern.matcher(test3);
System.out.println(matcher.find(2));//返回true
matcher = pattern.matcher(test3);
System.out.println(matcher.find(5));//返回false
3.Matcher类提供了start(),end(),group()分别用于返回字符串的起始索引,结束索引,以及匹配到到的字符串
Pattern pattern = Pattern.compile("Java");
String test = "123Java456";
Matcher matcher = pattern.matcher(test);
matcher.find();//必须有find函数
System.out.println(matcher.start());//返回3
System.out.println(matcher.end());//返回7
System.out.println(matcher.group());//返回Java
4.Matcher类提供了start(int gropu),end(int group),group(int i),groupCount()用于分组操作
Pattern pattern = Pattern.compile("(Java)(Python)");
String test = "123JavaPython456";
Matcher matcher = pattern.matcher(test);
matcher.find();
System.out.println(matcher.groupCount());//返回2
System.out.println(matcher.group(1));//返回第一组匹配到的字符串"Java",注意起始索引是1 System.out.println(matcher.start(1));//返回3,第一组起始索引
System.out.println(matcher.end(1));//返回7 第一组结束索引
System.out.println(matcher.group(2));//返回第二组匹配到的字符串"Python"
System.out.println(matcher.start(2));//返回7,第二组起始索引
System.out.println(matcher.end(2));//返回13 第二组结束索引
5.Matcher类还提供region(int start, int end)(不包括end)方法用于设定查找范围
Pattern pattern = Pattern.compile("Java");
String test = "123JavaJava";
Matcher matcher = pattern.matcher(test);
matcher.region(7, 11);
System.out.println(matcher.regionStart());//返回7
System.out.println(matcher.regionEnd());//返回11
matcher.find();
System.out.println(matcher.group());//返回Java6.Matcher类提供了两种用于重置当前匹配器的方法:reset()和reset(CharSequence input)
Pattern pattern = Pattern.compile("Java");
String test = "Java";
Matcher matcher = pattern.matcher(test);
matcher.find();
System.out.println(matcher.group());//返回Java
matcher.reset();//从起始位置重新匹配
matcher.find();
System.out.println(matcher.group());//返回Java
matcher.reset("Python");//重新定义输入
System.out.println(matcher.find());//返回false
7.最后说一下Matcher类的匹配方法:replaceAll(String replacement) 和 replaceFirst(String replacement),其中replaceAll是替换全部匹配到的字符串,而replaceFirst仅仅是替换第一个匹配到的字符串。
Pattern pattern = Pattern.compile("Java");
String test = "JavaJava";
Matcher matcher = pattern.matcher(test);
System.out.println(matcher.replaceAll("Python"));//返回PythonPython
System.out.println(matcher.replaceFirst("python"));//返回PythonJava