解决一个模式匹配需求
来源:互联网 发布:数据库实体类生成工具 编辑:程序博客网 时间:2024/05/23 01:17
log 如下:
链路名称 是否使用 是否故障 是否闭塞 是否激活 本端是否禁止 对端是否禁止 是否拥塞 是否倒换 是否倒回 信令链路选择码(十六进制) Server名称
BSH-BSC37_9 正在使用 正常 未闭塞 已激活 本端管理解禁 对端管理解禁 未拥塞 未发生倒换 未发生倒回 09 LOCAL
BSC39_15 正在使用 正常 未闭塞 已激活 本端管理解禁 对端管理解禁 未拥塞 未发生倒换 未发生倒回 0F LOCAL
(由于篇幅大小,只能对应的看了,例如 链路名称对应 BSH-BSC37_9,是否激活 对应 已激活)
需求如下:
匹配log是否有错,以下为正常情况下对应的字段:
是否故障:正常 是否使用:正在使用 信令链路选择吗(十六进制):不为空
整体解决方案:
将每一行读入,之后匹配判断,发现的问题:
1.标题和正文的如果用/S匹配那么是一样的:解决:用单词匹配,这样就区分了中文和单词,但是在单词匹配中链路名称有的有-,所以先将-去除,代码如下:
$line =~s/-//g; 匹配方案:/b/w+/b
2.解决16进制问题,首先如何匹配16进制,另外需求中的16进制数是0个或多个,解决方案:[[:xdigit:]/s+]{0,} ; [:xdigit:]是匹配16进制的意思,/s+是会有空格出现(因为 log中多个十六进制会用空格隔开),{0,}至少匹配0次
由于匹配出来的$11为 NULL(有很多空格)如果$11 eq "NULL" 肯定是不成功的,所以 用字符串处理函数
if(index($11,"NULL") != -1)
{
$null_flag = 1;
}
若找到了说明$11中包含NULL
总体的匹配方案:
$line =~m/^/s*/b/w+/b/s+(/S+)/s+(/S+)/s+(/S+)/s+(/S+)/s+(/S+)/s+(/S+)/s+(/S+)/s+(/S+)/s+(/S+)/s+([[:xdigit:]/s+]{0,})/s+(/S+)/s*$/)
- 解决一个模式匹配需求
- 一条sql语句解决一个变态需求
- 一个有意思的需求——中文匹配度
- 生活本身就是解决一个接一个需求的过程
- 完全模式和部分匹配的解决。。。
- KMP 解决串的模式匹配问题
- 一个模式匹配算法的优化
- 飘逸的python - 解决一个有限制的组合需求
- 怎样更健康解决一个人时的性需求
- sessionListener 实现解决一个账号不同时在线需求。
- 编写一个程序实现模式串的各种模式匹配
- 解决db4o中数据匹配的一个想法
- 发型匹配系统软件需求说明书
- 哈哈,原来模式匹配就是一个 strstr(string, str);
- 一个perl的实验程序,模式匹配的应用
- test() 方法用于检测一个字符串是否匹配某个模式.
- shell判断一个字符串是否匹配某个模式
- 只输出匹配的模式--正则表达式的一个应用
- 子程序和程序包
- jabber协议
- #define的一些用法(转)
- Lucene.Net 2.3.1开发介绍 —— 二、分词(一)
- Ellipse4SL for Silverlighter安装步骤
- 解决一个模式匹配需求
- Lucene.Net 2.3.1开发介绍 —— 二、分词(二)
- codeIgniter小记
- MDX功能初探
- 回调函数
- ORACLE函数大全
- Storm Worm && Botnet Analysis
- 新功能、新工具:Granite Data Service 1.1.0发布
- Lucene.Net 2.3.1开发介绍 —— 二、分词(三)