知识大全 Java正则表达式详解(中)

Posted

篇首语:桃李不言,下自成蹊。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 Java正则表达式详解(中)相关的知识,希望对你有一定的参考价值。

Java正则表达式详解(中)  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!

    三 应用实例     下面我们来看看Jakarta ORO库的一些应用实例         日志文件处理     任务 分析一个Web服务器日志文件 确定每一个用户花在网站上的时间 在典型的BEA WebLogic日志文件中 日志记录的格式如下      分析这个日志记录 可以发现 要从这个日志文件提取的内容有两项 IP地址和页面访问时间 你可以用分组符号(圆括号)从日志记录提取出IP地址和时间标记      首先我们来看看IP地址 IP地址有 个字节构成 每一个字节的值在 到 之间 各个字节通过一个句点分隔 因此 IP地址中的每一个字节有至少一个 最多三个数字 图八显示了为IP地址编写的正则表达式        图八 匹配IP地址    IP地址中的句点字符必须进行转义处理(前面加上 \\ ) 因为IP地址中的句点具有它本来的含义 而不是采用正则表达式语法中的特殊含义 句点在正则表达式中的特殊含义本文前面已经介绍      日志记录的时间部分由一对方括号包围 你可以按照如下思路提取出方括号里面的所有内容 首先搜索起始方括号字符( [ ) 提取出所有不超过结束方括号字符( ] )的内容 向前寻找直至找到结束方括号字符 图九显示了这部分的正则表达式        图九 匹配至少一个字符 直至找到 ]     现在 把上述两个正则表达式加上分组符号(圆括号)后合并成单个表达式 这样就可以从日志记录提取出IP地址和时间 注意 为了匹配 (但不提取它) 正则表达式中间加入了 \\s \\s \\s 完整的正则表达式如图十所示       图十 匹配IP地址和时间标记    现在正则表达式已经编写完毕 接下来可以编写使用正则表达式库的Java代码了      为使用Jakarta ORO库 首先创建正则表达式字符串和待分析的日志记录字符串       这里使用的正则表达式与图十的正则表达式差不多完全相同 但有一点例外 在Java中 你必须对每一个向前的斜杠( \\ )进行转义处理 图十不是Java的表示形式 所以我们要在每个 \\ 前面加上一个 \\ 以免出现编译错误 遗憾的是 转义处理过程很容易出现错误 所以应该小心谨慎 你可以首先输入未经转义处理的正则表达式 然后从左到右依次把每一个 \\ 替换成 \\\\ 如果要复检 你可以试着把它输出到屏幕上      初始化字符串之后 实例化PatternCompiler对象 用PatternCompiler编译正则表达式创建      现在 创建PatternMatcher对象 调用PatternMatcher接口的contain()方法检查匹配情况      接下来 利用PatternMatcher接口返回的MatchResult对象 输出匹配的组 由于logEntry字符串包含匹配的内容 你可以看到类如下面的输出       HTML处理实例一     下面一个任务是分析HTML页面内FONT标记的所有属性 HTML页面内典型的FONT标记如下所示        程序将按照如下形式 输出每一个FONT标记的属性      在这种情况下 我建议你使用两个正则表达式 第一个如图十一所示 它从字体标记提取出 face= Arial Serif size= + color= red      图十一 匹配FONT标记的所有属性    第二个正则表达式如图十二所示 它把各个属性分割成名字 值对          图十二 匹配单个属性 并把它分割成名字 值对    分割结果为       现在我们来看看完成这个任务的Java代码 首先创建两个正则表达式字符串 用Perl Compiler把它们编译成Pattern对象 编译正则表达式的时候 指定Perl Compiler CASE_INSENSITIVE_MASK选项 使得匹配操作不区分大小写      接下来 创建一个执行匹配操作的Perl Matcher对象       假设有一个String类型的变量 它代表了HTML文件中的一行内容 如果字符串包含FONT标记 匹配器将返回true 此时 你可以用匹配器对象返回的MatchResult对象获得第一个组 它包含了FONT的所   接下来创建一个PatternMatcherInput对象 这个对象允许你从最后一次匹配的位置开始继续进行匹配操作 因此 它很适合于提取FONT标记内属性的名字 值对 创建PatternMatcherInput对象 以参数形式传入待匹配的字符串 然后 用匹配器实例提取出每一个FONT的属性 这通过指定PatternMatcherInput对象(而不是字符串对象)为参数 反复地调用PatternMatcher对象的contains()方法完成 PatternMatcherInput对象之中的每一次迭代将把它内部的指针向前移动 下一次检测将从前一次匹配位置的后面开始      本例的输出结果如下                        cha138/Article/program/Java/hx/201311/26694

相关参考

知识大全 Java正则表达式详解(上)

Java正则表达式详解(上)  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  如果你曾经用过Per

知识大全 js正则表达式的使用详解

本篇文章是对js中正则表达式的使用进行了详细的分析介绍需要的朋友可以参考下   js中的正则表达式比起C#中的正则表达式要弱很多但基本够用了定义正则表达式关于验证的三个这则表达式方法正则表达

知识大全 Java中使用正则表达式验证本地化数据

Java中使用正则表达式验证本地化数据  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!数据验证是编写

知识大全 java正则表达式匹配

  三括号或匹配  在正则表达式中由于[]号只能做单个元素的匹配这样会限制正则表达式的作用如何做到多个元素的匹配呢?用()实现  ()可以进行多个元素的匹配例如:t(a|e|i|o|oo)n|在正则表

知识大全 java正则表达式非匹配

  四非匹配  在正则表达式中我们往往需要在字符串中进行非匹配这时就要通过^进行匹配条件限制^的常见入门用法如下:  [^az]    条件限制在非小写atoz

知识大全 JAVA 正则表达式4种常用的功能

JAVA正则表达式4种常用的功能  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!正则表达式在字符串处

知识大全 Java中的17种常用正则表达式归纳

Java中的17种常用正则表达式归纳  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  ^\\\\d

知识大全 构建用于正则表达式的抽象Java API

构建用于正则表达式的抽象JavaAPI  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  在我的经验

知识大全 正则表达式的基本语法

cha138/Article/program/Java/hx/201311/26752

知识大全 JAVA语言编程中如何使用表达式

JAVA语言编程中如何使用表达式  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  JAVA正则表达