[PerlChina] split function and zero-width seperator

cnhack TNT cnhacktnt at gmail.com
Thu Oct 22 17:57:37 PDT 2009


perl -MData::Dumper -le '$a="15678.91 ml; r45.12 "; @a=grep !/^\s*$/, split
/([\d\.]+)/, $a; print Dumper  \@a'

the regex pattern for split don't need to be that complicated. :-)



2009/10/23 tiger peng <tigerpeng2001 at yahoo.com>

> Hello everyone,
>
> I am trying to isolate numbers from string, manipulate the numbers then put
> them back to original positions in the string. When I try to use zero-width
> separator, the split function looks weird, it generated much more elements
> than I expect.
>
> Are there any mistakes? Why the split behaviors like this? (The
> regexp looks right when I used it s///)
>
> Could anyone help?
>
> Thanks,
> Tiger
>
> #build the seperator
> :-) perl -le '$a = "15678.91 ml; r45.12 ";
>               $a =~
> s/((?!(\d|\.))(?<=(\d|\.)))|((?=(\d|\.))(?<!(\d|\.)))/|/g;
>               print $a'
> |15678.91| ml; r|45.12|
>
> #use the seperator in split
> :-) perl -MData::Dumper -le '$a = "15678.91 ml; r45.12 ";
>                              @a = split
> /((?!(\d|\.))(?<=(\d|\.)))|((?=(\d|\.))(?<!(\d|\.)))/, $a;
>                              print Dumper(@a)'
> $VAR1 = '15678.91';
> $VAR2 = '';
> $VAR3 = undef;
> $VAR4 = '1';
> $VAR5 = undef;
> $VAR6 = undef;
> $VAR7 = undef;
> $VAR8 = ' ml; r';
> $VAR9 = undef;
> $VAR10 = undef;
> $VAR11 = undef;
> $VAR12 = '';
> $VAR13 = '4';
> $VAR14 = undef;
> $VAR15 = '45.12';
> $VAR16 = '';
> $VAR17 = undef;
> $VAR18 = '2';
> $VAR19 = undef;
> $VAR20 = undef;
> $VAR21 = undef;
> $VAR22 = ' ';
>
> _______________________________________________
> China-pm mailing list
> China-pm at pm.org
> http://mail.pm.org/mailman/listinfo/china-pm
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.pm.org/pipermail/china-pm/attachments/20091023/87a591c7/attachment.html>


More information about the China-pm mailing list