· boolean matches(PatternMatcherInput input, Pattern pattern)
· boolean matchesPrefix(PatternMatcherInput input, Pattern pattern)
· boolean contains(PatternMatcherInput input, Pattern pattern)
三、应用实例
下面我们来看看Jakarta-ORO库的一些应用实例。
3.1 日志文件处理惩罚
任务:阐明一个Web处事器日志文件,确定每一个用户花在网站上的时间。在典范的BEA WebLogic日志文件中,日志记录的名目如下:
阐明这个日志记录,可以发明,要从这个日志文件提取的内容有两项:IP地点和页面会见时间。你可以用分组标记(圆括号)从日志记录提取出IP地点和时间标志。
首先我们来看看IP地点。IP地点有4个字节组成,每一个字节的值在0到255之间,各个字节通过一个句点脱离。因此,IP地点中的每一个字节有至少一个、最多三个数字。图八显示了为IP地点编写的正则表达式:
图八:匹配IP地点
IP地点中的句点字符必需举办转义处理惩罚(前面加上“/”),因为IP地点中的句点具有它原来的寄义,而不是回收正则表达式语法中的非凡寄义。句点在正则表达式中的非凡寄义本文前面已经先容。
日志记录的时间部门由一对方括号困绕。你可以凭据如下思路提取出方括号内里的所有内容:首先搜索起始方括号字符(“[”),提取出所有不高出竣事方括号字符(“]”)的内容,向前寻找直至找到竣事方括号字符。图九显示了这部门的正则表达式。
图九:匹配至少一个字符,直至找到“]”
此刻,把上述两个正则表达式加上分组标记(圆括号)后归并成单个表达式,这样就可以从日志记录提取出IP地点和时间。留意,为了匹配“- -”(但不提取它),正则表达式中间插手了“/s-/s-/s”。完整的正则表达式如图十所示。
图十:匹配IP地点和时间标志
此刻正则表达式已经编写完毕,接下来可以编写利用正则表达式库的Java代码了。
为利用Jakarta-ORO库,首先建设正则表达式字符串和待阐明的日志记录字符串:
这里利用的正则表达式与图十的正则表达式差不多完全沟通,但有一点破例:在Java中,你必需对每一个向前的斜杠(“/”)举办转义处理惩罚。图十不是Java的暗示形式,所以我们要在每个“/”前面加上一个“/”以免呈现编译错误。遗憾的是,转义处理惩罚进程很容易呈现错误,所以应该小心审慎。你可以首先输入未经转义处理惩罚的正则表达式,然后从左到右依次把每一个“/”替换成“//”。假如要复检,你可以试着把它输出到屏幕上。
初始化字符串之后,实例化PatternCompiler工具,用PatternCompiler编译正则表达式建设一个Pattern工具:
此刻,建设PatternMatcher工具,挪用PatternMatcher接口的contain()要领查抄匹配环境:
接下来,操作PatternMatcher接口返回的MatchResult工具,输出匹配的组。由于logEntry字符串包括匹配的内容,你可以看到类如下面的输出:
3.2 HTML处理惩罚实例一
下面一个任务是阐明HTML页面内FONT标志的所有属性。HTML页面内典范的FONT标志如下所示:
措施将凭据如下形式,输出每一个FONT标志的属性:
在这种环境下,我发起你利用两个正则表达式。第一个如图十一所示,它从字体标志提取出“"face="Arial, Serif" size="+2" color="red"”。
图十一:匹配FONT标志的所有属性
第二个正则表达式如图十二所示,它把各个属性支解成名字-值对。
图十二:匹配单个属性,并把它支解成名字-值对
支解功效为: