JAVA 正则表达式陈广佳版本(超具体)(11)

前两个参数别离为PatternMatcher和Pattern工具。而第三个参数是个Substiution工具,由它来抉择替换操纵如何举办。第四个参数是要举办替换操纵的方针字符串,最后一个参数用来指定是否替换模式的所有匹配子串(Util.SUBSTITUTE_ALL),或只举办指定次数的替换。

在这里我相信有须要具体讲解一下第三个参数Substiution工具,因为它将抉择替换将奈何举办。

Substiution:
Substiution是一个接口类,它为你提供了在利用Util.substitute()要领时节制替换方法的手段,它有两个尺度的实现类:StringSubstitution与Perl5Substitution。虽然,同时你也可以生本钱身的实现类来定制你所需要的非凡替换行动。

StringSubstitution:
StringSubstitution 实现的是简朴的纯文字替换手段,它有两个结构要领:

StringSubstitution()->缺省的结构要领,初始化一个包括零长度字符串的替换工具。

StringSubstitution(java.lang.String substitution)->初始化一个给定字符串的替换工具。

Perl5Substitution:
Perl5Substitution 是StringSubstitution的子类,它在实现纯文字替换手段的同时也答允举办针对MATH类里各匹配组的PERL5变量的替换,所以他的替换手段比其直接父类StringSubstitution更为多元化。

它有三个结构器:

Perl5Substitution()

Perl5Substitution(java.lang.String substitution)

Perl5Substitution(java.lang.String substitution, int numInterpolations)

前两种结构要领与StringSubstitution一样,而第三种结构要领下面将会先容到。

在Perl5Substitution的替换字符串中可以包括用来替代在正则表达式里由小扩号围起来的匹配组的变量,这些变量是由$1, $2,$3等形式来标识。我们可以用一个例子来表明奈何利用替换变量来举办替换:

假设我们有正则表达式模式为b/d+:(也就是b[0-9]+:),而我们想把所有匹配的字符串中的"b"都改为"a",而":"则改为"-",而其余部门则不作修改,如我们输入字符串为"EXAMPLE b123:",颠末替换后就应该酿成"EXAMPLE a123-"。要做到这点,我们就首先要把不做替换的部门用分组标记小括号包起来,这样正则表达式就变为"b(/d+):",而结构Perl5Substitution工具时其替换字符串就应该是"a$1-",也就是结构式为Perl5Substitution("a$1-"),暗示在利用Util.substitute()要领时只要在方针字符串里找到和正则表达式" b(/d+): "相匹配的子串都用替换字符串来替换,而变量$1暗示假如和正则表达式里第一个组相匹配的内容则照般原文插到$1地址的为置,如在"EXAMPLE b123:"中和正则表达式相匹配的部门是"b123:",而个中和第一分组"(/d+)"相匹配的部门则是"123",所以最后替换功效为"EXAMPLE a123-"。

有一点需要清楚的是,假如你把结构器Perl5Substitution(java.lang.String substitution,int numInterpolations)

中的numInterpolations参数设为INTERPOLATE_ALL,那么当每次找到一个匹配字串时,替换变量($1,$2等)所指向的内容都按照今朝匹配字串来更新,可是假如numInterpolations参数设为一个正整数N时,那么在替换时就只会在前N次匹配产生时替换变量会跟从匹配工具来调解所代表的内容,但N次之后就以一致以第N次替换变量所代表内容来做为今后替换功效。

举个例子会更好领略:

如果沿用以上例子中的正则表达式模式以及替换内容来举办替换事情,设方针字符串为"Tank b123: 85 Tank b256: 32 Tank b78: 22",而且设numInterpolations参数为INTERPOLATE_ALL,而Util.substitute()要领中的numSub变量设为SUBSTITUTE_ALL(请参考上文Util.substitute()要领内容),那么你得到的替换功效将会是:
Tank a123- 85 Tank a256- 32 Tank a78- 22

可是假如你把numInterpolations设为2,而且numSubs依然设为SUBSTITUTE_ALL,那么这时你得到的功效则会是:
Tank a123- 85 Tank a256- 32 Tank a256- 22

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wsdxpw.html