Chinaunix

标题: perl正则匹配结果保存 [打印本页]

作者: tanos    时间: 2008-08-27 14:57
标题: perl正则匹配结果保存
有一个很大的字符串,格式类似如下:

a=string1&b=1,2&....a=string2&b=1,3&....

现在想用正则表达式把a的值string1,string2和b的值1,2和1,3等取出来,应该如何处理?

PHP中有preg_match_all将他们保存到一个数组中,perl应该如何做?谢谢
作者: 不死草    时间: 2008-08-27 15:10
取b的值倒是比较简单,可以直接使用“&”和split,然后匹配"b="就可以了;
如果是取a的值,可能有一个复杂的办法,首先使用“a=”和split,然后取所有的"&b="前面的内容就可以了。
方法可能不是最好的,但是能解决问题。
作者: tanos    时间: 2008-08-27 15:16
谢谢楼上的,关键是如何把每个值都保存下来?

比如a的值为string1或者string2或者其他的,如何把每个值都分别保存下来?
作者: flw    时间: 2008-08-27 15:22
use CGI;
作者: tanos    时间: 2008-08-27 15:30
版主能说详细一点吗?谢谢
作者: flw    时间: 2008-08-27 15:37
原帖由 tanos 于 2008-8-27 15:30 发表
版主能说详细一点吗?谢谢

http://search.cpan.org/~lds/CGI.pm-3.41/CGI.pm
作者: forlorngenius    时间: 2008-08-27 17:19
哈哈,还是flw看出你的问题。 以后先说清你的问题
作者: cobrawgl    时间: 2008-08-27 19:02
还是 斑竹 牛,一眼看穿了他的外衣
作者: forlorngenius    时间: 2008-08-27 20:12
水啊
作者: zzyong08    时间: 2008-08-28 10:59
标题: 回复 #1 tanos 的帖子
#!/usr/bin/perl

my $str = qq|a=string1&b=1,2&a=string2&b=1,3&a=string3&b=1,4|;
while($str =~ /([ab])=([^&]+)/g){
        print $1,"\t",$2,"\n";
}

输出:
a       string1
b       1,2
a       string2
b       1,3
a       string3
b       1,4

不知道是不是你想要的.
作者: tanos    时间: 2008-08-28 16:19
谢谢大家的回复,详细描述一下问题:

有一些日志文件(100G+),需要对他们进行分析,统计出某些参数的值如string1,string2的总数,但不全是url参数,还有浏览器什么的。

考虑到I/O,所以想一次读取日志多行再分析,现在不知道如何下手
作者: flw    时间: 2008-08-28 16:23
apache 日志?
作者: tanos    时间: 2008-08-28 16:34
是apache日志:)
作者: tanos    时间: 2008-08-28 16:37
以前是PHP写的,速度很慢,打算用perl重写一次,顺便学习一下perl
作者: tanos    时间: 2008-08-29 10:29
up
作者: flw    时间: 2008-08-29 11:07
还藏着掖着不肯说,“一些日志”,那你就继续一些日志去吧。
本来想告诉你 CPAN 上有现成的模块的,也懒得告诉你了。
作者: xiaoyu9805119    时间: 2008-08-29 11:21
apache日志又不是啥机密的事情把,支持楼上,就不告诉他,让他猜




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2