此刻我们来看看完成这个任务的Java代码。首先建设两个正则表达式字符串,用Perl5Compiler把它们编译成Pattern工具。编译正则表达式的时候,指定Perl5Compiler.CASE_INSENSITIVE_MASK选项,使得匹配操纵不区分巨细写。
接下来,建设一个执行匹配操纵的Perl5Matcher工具。
假设有一个String范例的变量html,它代表了HTML文件中的一行内容。假如html字符串包括FONT标志,匹配器将返回true。此时,你可以用匹配器工具返回的MatchResult工具得到第一个组,它包括了FONT的所有属性:
接下来建设一个PatternMatcherInput工具。这个工具答允你从最后一次匹配的位置开始继承举办匹配操纵,因此,它很适合于提取FONT标志内属性的名字-值对。建设PatternMatcherInput工具,以参数形式传入待匹配的字符串。然后,用匹配器实例提取出每一个FONT的属性。这通过指定PatternMatcherInput工具(而不是字符串工具)为参数,重复地挪用PatternMatcher工具的contains()要领完成。PatternMatcherInput工具之中的每一次迭代将把它内部的指针向前移动,下一次检测将从前一次匹配位置的后头开始。
本例的输出功效如下:
3.3 HTML处理惩罚实例二
下面我们来看看另一个处理惩罚HTML的例子。这一次,我们假定Web处事器从widgets.acme.com移到了newserver.acme.com。此刻你要修改一些页面中的链接:
执行这个搜索的正则表达式如图十三所示:
图十三:匹配修改前的链接
假如可以或许匹配这个正则表达式,你可以用下面的内容替换图十三的链接:
留意#字符的后头加上了$1。Perl正则表达式语法用$1、$2等暗示已经匹配且提取出来的组。图十三的表达式把所有作为一个组匹配和提取出来的内容附加到链接的后头。
此刻,返回Java。就象前面我们所做的那样,你必需建设测试字符串,建设把正则表达式编译到Pattern工具所必须的工具,以及建设一个PatternMatcher对像
接下来,用com.oroinc.text.regex包Util类的substitute()静态要领举办替换,输出功效字符串:
Util.substitute()要领的语法如下:
这个挪用的前两个参数是以前建设的PatternMatcher和Pattern工具。第三个参数是一个Substiution工具,它抉择了替换操纵如何举办。本例利用的是Perl5Substitution工具,它可以或许举办Perl5气势气魄的替换。第四个参数是想要举办替换操纵的字符串,最后一个参数答允指定是否替换模式的所有匹配子串(Util.SUBSTITUTE_ALL),或只替换指定的次数。
【竣事语】在这篇文章中,我为你先容了正则表达式的强大成果。只要正确运用,正则表达式可以或许在字符串提取和文本修改中起到很大的浸染。别的,我还先容了如安在Java措施中通过Jakarta-ORO库操作正则表达式。至于最终回收老式的字符串处理惩罚方法(利用StringTokenizer,charAt,和substring),照旧回收正则表达式,这就有待你本身抉择了。
Jakarta-ORO篇