Bill Stennett - compuserve wrote:
> Hi All,
>
> I have a string formatted like this:
>
> my $mystring = 'var1=123::var2=abc456::var3=10.99::var4=def';
>
> What I need to do is to be able to extract name=value. I cannot be sure
> where in the list a any value will occur so to extract a value for 'var2'
> from the above example would require matching either:
>
> '::var2=abc456::'
>
> or
> 'var2=abc456::'
>
> or
> '::var2=abc456'
>
> Can anyone suggest a regex to do this?
Not sure what all the line possibilities are, but if they all look similar to
the above I'd do something like :
# $_ = 'var1=123::var2=abc456::var3=10.99::var4=def';
$_ = ' var1 = 123 :: var2 = abc456 :: var3 = 10.99 :: var4 = def '; # test with
WS
my @kvs = split /\s*::\s*/; # split on ::
foreach (@kvs) {
my ($key, $value) = $_ =~ /^\s*([^=]+?)\s*=\s*(.*?)\s*$/;
print "key='$key', value='$value'\n" if defined $value;
}
> I've been trying things like:
>
> ( $valueforvar2 ) = $mystring =~ m/var2=(.+)[::]/;
>
> but this only works if 'var2' is not last in the string. It also generqate a
> warning as follows: "POSIX syntax [: :] belongs inside character classes in
> regex; marked by <-- HERE in m/var2=(.+)[::] <-- HERE / at Untitled line...
>
> Any suggestions appreciated.
_______________________________________________
ActivePerl mailing list
[email protected]
To unsubscribe: http://listserv.ActiveState.com/mailman/mysubs