[PerlChina] split function and zero-width seperator

tiger peng tigerpeng2001 at yahoo.com
Thu Oct 22 20:23:35 PDT 2009


Here is what I want:
 
:-) perl -MData::Dumper -MRegexp::Common -le '$a="15678.91 ml; .121 0.12312  >
$VAR1 = [
          '15678.91',
          ' ml; ',
          '.121',
          ' ',
          '0.12312',
          '  ',
          '12313.',
          ' r',
          '45.12',
          ' '
        ];






________________________________
From: tiger peng <tigerpeng2001 at yahoo.com>
To: china-pm at pm.org
Sent: Thu, October 22, 2009 9:59:15 PM
Subject: Re: [PerlChina] split function and zero-width seperator


Thank. I thought the seperator would lost. I just read perldoc -f split, which says, "If the PATTERN contains parentheses, additional list elements are created from each matching substring in the delimiter."




________________________________
From: cnhack TNT <cnhacktnt at gmail.com>
To: china-pm at pm.org
Sent: Thu, October 22, 2009 7:57:37 PM
Subject: Re: [PerlChina] split function and zero-width seperator

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/20091022/43aa44c7/attachment-0001.html>


More information about the China-pm mailing list