Java正则表达式Pattern和Matcher类简介

MySQL正则表达式通过java.util.regex包下的Pattern和Matcher类实现
Pattern类的作用在于编译正则表达式后创建一个匹配模式.
    可以通过两个静态方法创建Pattern:compile(String regex)和compile(String regex,int flags),其中regex是正则表达式,flags为可选模式(如:Pattern.CASE_INSENSITIVE 忽略大小写)
Matcher类使用Pattern实例提供的模式信息对正则表达式进行匹配


实例1(实用):
Pattern类的根据匹配模式拆分输入序列的方法:split(CharSequence input)和split(CharSequence input, int limit),其中limit为返回元素的个数

Pattern pattern = Pattern.compile("MySQL");
String testStr="123MySQL456MySQL789MySQL";
String[] result = pattern.split(testStr);
for(String s : result)
    System.out.println(s);

实例2:
Pattern类的静态匹配方法matches(String regex, CharSequence input),只能进行全字符串匹配并且只能返回是否匹配上的boolean值

String testStr1 = "MySQL";
String testStr2 = "MySQL123456";

System.out.println(Pattern.matches("MySQL",testStr1));//返回true
System.out.println(Pattern.matches("MySQL",testStr2));//返回false

实例3
Pattern类中的matcher(CharSequence input)会返回一个Matcher对象。Matcher类提供了对正则表达式的分组支持,以及对正则表达式的多次匹配支持,要想得到更丰富的正则匹配操作,那就需要将Pattern与Matcher联合使用。

Pattern pattern = Pattern.compile("MySQL");
String testStr = "123MySQL456MySQL789MySQL";
Matcher matcher = pattern.matcher();

Matcher类提供了三个返回boolean值得匹配方法:matches(),lookingAt(),find(),find(int start),其中matches()用于全字符串匹配,lookingAt从字符串最开头开始匹配满足的子串,find可以对任意位置字符串匹配,其中start为起始查找索引值。


这里介绍下组的概念:组是用括号划分的正则表达式,可以根据组的编号来引用这个组。组号为0表示整个表达式,组号为1表示被第一对括号括起的组,依次类推,例如A(B(C))D,组0是ABCD,组1是BC,组2是C。

Matcher类提供了start(),end(),group()分别用于返回字符串的起始索引,结束索引,以及匹配到到的字符串。实例 4:

Pattern pattern = Pattern.compile("MySQL");
String testStr = "123MySQL456";

Matcher matcher = pattern.matcher(testStr);
matcher.find();
System.out.println(matcher.start());//返回3
System.out.println(matcher.end());//返回7
System.out.println(matcher.group());//返回MySQL


实例(实用):

String regex1 = "##([0-9a-zA-Z]{8})(.*)([0-9END]{6})";//[0-9END] 代表匹配数字或者字母E|N|D,{6}代表正好匹配6个,
String msg = "##123BEGINname=zhangsan;age=26&&END456";
Pattern pattern = Pattern.compile(regex1);
Matcher matcher = pattern.matcher(msg);
int len = matcher.groupCount();
boolean bool1 = matcher.find();
String cnt = matcher.group();
String str1 = matcher.group(1);
String str3 = matcher.group(3);


结果:


其他:
Matcher类提供了start(int gropu),end(int group),group(int i),groupCount()用于分组操作
Matcher类的region(int start, int end)(不包括end)方法用于限定查找范围,并提供regionStrat()和regionEnd()用于返回起始和结束查找的索引
Matcher类提供了两种用于重置当前匹配器的方法:reset()和reset(CharSequence input)
Matcher类的匹配替换方法:
    replaceAll(String replacement) //replaceAll是替换全部匹配到的字符串
    replaceFirst(String replacement) //replaceFirst仅仅是替换第一个匹配到的字符串
    

猜你喜欢

转载自blog.csdn.net/jc_benben/article/details/106562708