#!/usr/bin/perl -w
use strict;
$_ = '156,"15,234",567,845,156,234,567,845';
my @array = /((?:(?<=")(?:\d+,\d+)(?="))|(?:\d+)),?/g;
или
my @array = /((?<=")\d+,\d+(?=")|\d+)/g;
Ако горното те притеснява като сложност...
@array вече ще съдържа както следва следните елементи (подред от 0-6):
156
15,234
567
845
156
234
567
845
Не е най-доброто, което може да се измисли, но... Има и по-трудно нещо, което ми дойде първо като идея, но горното сякаш хем си върши работата хем е малко сложно и кефи;)
$str='1,"3,21",5,6,"12,41"';
while ($str)
{
($obj, $str) = popitem($str);
push(@ar, $obj);
}
print join("|", @ar);
sub popitem
{
my $in = shift;
my @out;
if ($in =~ m/^(\d+),(.*)/) { $out[0] = $1; $out[1] = $2; return @out; }
elsif ($in =~ m/^"(.+?)",(.*)/) { $out[0] = $1; $out[1] = $2; return @out; }
else { $in =~ s/"//g; $out[0] = $in; return @out; }
}
Надявам се, че това помогна...
|