特殊的字串分割问题,请高人指点指点.....

特殊的字串分割问题,请高人指点指点.....

特殊的字串分割问题,请高人指点指点.....
以下程序把<tag: img=".." src="..." time="2003-5-6 12:00:00">中的各项存入数组,
img=>".."
src=>"..."
time=>"2003-5-6 12:00:00"
这里程序在time那出问题了,因为是按空格分割,而日期中刚好有空格,这时日期实际就只剩下前半部分了,请高人指点指点.....

while($code=~/\<tag:(.+?)\>/o)
{
@list = split(/ /, $1);
%value = ();
foreach (@list)
{
my($name, $value) = split(/=/, $_);
$value =~ s/\"//g;
$value{$name} = $value;
}
}
那就全都用正则呗.
给你个蠢方法,第一次以ti.
给你个蠢方法,第一次以time匹配,第二次匹配空格
这是我的方法
[quote]my $str = '<tag: img=".." src="..." time="2003-5-6 12:00:00">';
$str =~ s/\<.+?img=\"(.+?)\" src=\"(.+?)\" time=\"(.+?)\">/$1|$2|$3/ig;
my ($img, $src, $time) = split /\|/, $str;

print $time;[/quote]
这个可以吗?
my %hash;
while ($str =~ /([^\s]+)=\"(.+?)\"/g) {
$hash{$1} = $2;
}
这个问题其实是再简单也不.
这个问题其实是再简单也不过了,
从回帖的人来看,很多人只是明白了 Perl 的大意,但是并不了解 Perl 的小节。

就我的意见,
楼主只需要把
@list = split(/ /, $1);
改成
@list = split(/ /, $1, 3);
就可以了。
具体为什么这么做,
请 perldoc -f split




   

另外,楼主还可以这么做:.
另外,楼主还可以这么做:
my $str = '<tag: img=".." src="..." time="2003-5-6 12:00:00">';
while( $str =~ /(\w+)="(.*?)"/g ){
print "$1 => $2\n";
}
my %s = ($str =~ /(\S+?).
my %s = ($str =~ /(\S+?)="([^"]+)"/g);
上面我没考虑=周围的空格,需要的话自己加两个\s*