JAVA 正则表达式陈广佳版本(超详细)

2020-03-05 18:01:51王振洲

Pattern对象创建好之后,就可以通过PatternMatcher类用该Pattern对象进行模式匹配。

★PatternMatcher对象:

PatternMatcher对象依据Pattern对象和字符串展开匹配检查。你要实例化一个Perl5Matcher类并把结果赋值给PatternMatcher接口。Perl5Matcher类是PatternMatcher接口的一个实现,它根据Perl 5正则表达式语法进行模式匹配:
PatternMatcher matcher=new Perl5Matcher();

PatternMatcher对象提供了多个方法进行匹配操作,这些方法的第一个参数都是需要根据正则表达式进行匹配的字符串:

1、boolean matches(String input, Pattern pattern):当要求输入的字符串input和正则表达式pattern精确匹配时使用该方法。也就是说当正则表达式完整地描述输入字符串时返回真值。
2、boolean matchesPrefix(String input, Pattern pattern):要求正则表达式匹配输入字符串起始部分时使用该方法。也就是说当输入字符串的起始部分与正则表达式匹配时返回真值。
3、boolean contains(String input, Pattern pattern):当正则表达式要匹配输入字符串的一部分时使用该方法。当正则表达式为输入字符串的子串时返回真值。

但以上三种方法只会查找输入字符串中匹配正则表达式的第一个对象,如果当字符串可能有多个子串匹配给定的正则表达式时,那么你就可以在调用上面三个方法时用PatternMatcherInput对象作为参数替代String对象,这样就可以从字符串中最后一次匹配的位置开始继续进行匹配,这样就方便的多了。

用PatternMatcherInput对象作为参数替代String时,上述三个方法的语法如下:

boolean matches(PatternMatcherInput input, Pattern pattern) boolean matchesPrefix(PatternMatcherInput input, Pattern pattern) boolean contains(PatternMatcherInput input, Pattern pattern)

★Util.substitute()方法:
查找后需要要进行替换,我们就要用到Util.substitute()方法,其语法如下:

public static String substitute(PatternMatcher matcher,
Pattern pattern,Substitution sub,String input,
int numSubs)

前两个参数分别为PatternMatcher和Pattern对象。而第三个参数是个Substiution对象,由它来决定替换操作如何进行。第四个参数是要进行替换操作的目标字符串,最后一个参数用来指定是否替换模式的所有匹配子串(Util.SUBSTITUTE_ALL),或只进行指定次数的替换。

在这里我相信有必要详细解说一下第三个参数Substiution对象,因为它将决定替换将怎样进行。

Substiution:
Substiution是一个接口类,它为你提供了在使用Util.substitute()方法时控制替换方式的手段,它有两个标准的实现类:StringSubstitution与Perl5Substitution。当然,同时你也可以生成自己的实现类来定制你所需要的特殊替换动作。