perl 正则表达式问题
时间:2010-11-17
来源:互联网
本帖最后由 cduedu 于 2010-11-17 17:29 编辑
实例内容:
复制代码
假设:reason可能包括一些字母、数字、空格等内容
目的:把reason="xxxx"和msg="xxxx"的内容取出来。在用下面的代码匹配的时候老是有问题
复制代码
perl在匹配reason的时候把属于msg的内容也取出来了。
结果:
unbind" msg="test
unbind" msg="test
有没有办法perl只取到两个引号间的内容而不是后面的也包括在里面。
暂时来看
复制代码
没什么问题,但这个办法感觉不太好,大家有没有简单点有效的办法
实例内容:
- [15/Nov/2010:21:16:41 +0100] - OPERATION - INFO - conn=1477577 op=2 UNBIND test
- [15/Nov/2010:21:16:41 +0100] - OPERATION - INFO - conn=1477577 op=2 UNBIND
- [15/Nov/2010:21:16:41 +0100] - DISCONNECT - INFO - conn=1477577 reason="unbind" msg="test"
- [15/Nov/2010:21:16:41 +0100] - DISCONNECT - INFO - conn=1477577 reason="close by client" msg="test"
目的:把reason="xxxx"和msg="xxxx"的内容取出来。在用下面的代码匹配的时候老是有问题
- if ($_ =~ /reason=*\"(.*)\"/i) { $reason=$1;}
- if ($_ =~ /msg=*\"(.*)\"/i) { $dmsg=$1;}
结果:
unbind" msg="test
unbind" msg="test
有没有办法perl只取到两个引号间的内容而不是后面的也包括在里面。
暂时来看
- if ($_ =~ /reason=\"([a-zA-Z ]+)\"/i)
作者: cduedu 发布时间: 2010-11-17
- if ($_ =~ /reason=*\"(.*?)\"/i) { $reason=$1;}
- if ($_ =~ /msg=*\"(.*?)\"/i) { $dmsg=$1;}
作者: fanasy 发布时间: 2010-11-17
本帖最后由 jason680 于 2010-11-17 17:54 编辑
复制代码
如果msg一定接在reason后面,可以这样
复制代码
注:少用(别用) .*或.*? ,在你没完全了解* 为0 到多个,中的0(零)个真正义前,不要用它...
QUOTE:
实例内容:假设:reason可能包括一些字母、数字、空格等内容
目的:把reason="xxxx"和msg="xxxx"的内容取出 ...
cduedu 发表于 2010-11-17 17:27
目的:把reason="xxxx"和msg="xxxx"的内容取出 ...
cduedu 发表于 2010-11-17 17:27
- $reason=$1 if(m/reason="([^"]+)"/);
- $dmsg=$1 if(m/msg="([^"]+)"/);
- if(m/reason="([^"]+)"\s+msg="([^"]+)"/){
- ($reason, $dmsg) = ($1, $2);
- }
作者: jason680 发布时间: 2010-11-17
二楼的好
作者: blacktt 发布时间: 2010-11-17
相关阅读 更多
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28