新手 请教个perl 字符串匹配问题

新手 请教个perl 字符串匹配问题

# execute SELECT query

my $sth = $dbh->prepare("select key_id,key_name from `keyword` a ");
$sth->execute();

while (my $hash_ref = $sth->fetchrow_hashref) {
my $key_id      =       $hash_ref->{'key_id'};
my $key_name    =       $hash_ref->{'key_name'};
}


变量格式为:
key_id :1111
key_name:铅材

# execute SELECT query

my $sth = $dbh->prepare("select id, guid,src_href,referrer,start_time,src_ip
                                from t_data  where state=0");
$sth->execute();

while (my $hash_ref = $sth->fetchrow_hashref) {
#    print $hash_ref->{'guid'};

#    print $hash_ref->{'key_name'};

#    print $hash_ref;


my $guid        =               $hash_ref->{'guid'};
my $src_href    =               $hash_ref->{'src_href'};
my $referrer    =               $hash_ref->{'referrer'};
my $start_time  =               $hash_ref->{'start_time'};
my $src_ip      =               $hash_ref->{'src_ip'};

}



变量格式为:
src_href:
http://www.xxx.com/aix/vc/ag.phpkw=超市货架&url=http://www.vc.com/Html/sub3-cpas.asp?SortID=145&SortPath=0,145,&adtype=2&pdid=102&cid=251508&grid=11307&kwid=17970&kldp=opl



需求是这样的:
需要从$src_href里从右开始取出第一个kwid=后的值



$key_id匹配,得到对应的$key_name

请教上面两块红色部份,正常程序员是咱整的,不需要详尽代码,思路即可。谢谢
我咋就没看懂你想做什么呢


QUOTE:
原帖由 cobrawgl 于 2009-1-5 17:11 发表
我咋就没看懂你想做什么呢

理解 因为我不是程序员  所以表达的好像不太准确。

简单的说是里面的3个变量

key_id,key_name

kwid

需要拿kwid到去跟key_id匹配找到对应的key_name。

另外就是先要取出kwid,从$src_href里从右开始取出第一个kwid=后的值
变量格式为:
src_href:
http://www.xxx.com/aix/vc/ag.phpkw=超市货架&url=http://www.vc.com/Html/sub3-cpas.asp?SortID=145& SortPath=0,145,&adtype=2&pdid=102&cid=251508&grid=11307&kwid=17970&kldp=opl
#!/usr/bin/perl

use strict;
use warnings;

use URI;

my $src_ip = 'http://www.xxx.com/aix/vc/ag.phpkw=超市货架&url=http://www.vc.com/Html/sub3-cpas.asp?SortID=145&SortPath=0,145,&adtype=2&pdid=102&cid=251508&grid=11307&kwid=17970&kldp=opl';

my $url = URI->new($src_ip);
my %query = $url->query_form();

print $query{'kwid'};

----------------------------------

拿到 kwid 的值,你就该干嘛干嘛去吧
把 src_href 按 & 劈开(split),把得到的 array 从后往前遍历,找以 kwid 开头的 element 就行了。至于说用 kwid 匹配 key_id 找 key_name 就更简单了,把所有的 key_id 和 key_name 作个 hash 就行了。
sweat

直接用已有的模块也是不错的选择。


QUOTE:
原帖由 cobrawgl 于 2009-1-5 17:39 发表
#!/usr/bin/perl

use strict;
use warnings;

use URI;

my $src_ip = 'http://www.xxx.com/aix/vc/ag.phpkw=超市货架&url=http://www.vc.com/Html/sub3-cpas.asp?SortID=145&SortPath=0,145,&adtype=2 ...

^_^ URL这个模块取参数好。

谢谢!


QUOTE:
原帖由 MMMIX 于 2009-1-5 17:43 发表
把 src_href 按 & 劈开(split),把得到的 array 从后往前遍历,找以 kwid 开头的 element 就行了。至于说用 kwid 匹配 key_id 找 key_name 就更简单了,把所有的 key_id 和 key_name 作个 hash 就行了。

恩恩恩。。。

红色的我要看看手册先。


[Copy to clipboard] [ - ]
CODE:
my $str = 'http://www.xxx.com/aix/vc/ag.phpkw=超市货架&url=http://www.vc.com/Html/sub3-cpas.asp?SortID=145& SortPath=0,145,&adtype=2&pdid=102&cid=251508&grid=11307&kwid=17970&kldp=opl';
$str =~ m/kwid=(\d+)/; #取得kwid
print my $kwid = $1;
my $sth = $dbh->prepare("SELECT key_name from keyword where key_id = $kwid"); #查找满足key_id = kwid 项
$sth->execute();

既然数据都已经在数据库中为什么不用数据库找呢



QUOTE:
原帖由 DQP 于 2009-1-5 17:48 发表

my $str = 'http://www.xxx.com/aix/vc/ag.phpkw=超市货架&url=http://www.vc.com/Html/sub3-cpas.asp?SortID=145& SortPath=0,145,&adtype=2&pdid=102&cid=251508&grid=11307&kwid=17970&kldp=opl';
$str = ...

两个数据库。不是同一个DB。
另外就是用数据库找慢。量大的时候。