Beefy Boxes and Bandwidth Generously Provided by pair Networks
Just another Perl shrine
 
PerlMonks  

Re: Stuck in komplexer regex, at least for me

by ultibuzz (Monk)
on Mar 26, 2007 at 19:17 UTC ( #606641=note: print w/ replies, xml ) Need Help??


in reply to Stuck in komplexer regex, at least for me

sorry for the bad explanation, i try to explain it better
the following regex will produce this

s/(?<=\d{2})0*(?<=\d{4})0+// output 215000007801 -> 2157801 300000324002 -> 30324002 890000457651 -> 89457651 210004563401 -> 214563401 201045139158 -> 201045139158

these 2 outputs are wrong
201045139158 -> 201045139158
215000007801 -> 2157801
shoud be
215000007801 -> 21507801
201045139158 -> 20145139158


now i try to explain the rule better,counting starts at 0
the 0 , 1 digits shoud be untouched
if the 2 digit is a 0 and the next digit is a 0 remove all 0 untill first non 0
if the 2 digit a 0 and the next is a non 0 remove the 0
if the 3 digit is a 0 and follows by a 0 then remove all 0 except the 0 at 3 digit
if the 3 digit is a 0 and the next digit is a non 0 remove only the 0
if the 4 digit is a 0 remove it and all following 0 untill non 0

i hope that makes it a bit clearer, i know its kinda confusing

kd ultibuzz

i will test the help u all already given tomorrow at office,thx alot


Comment on Re: Stuck in komplexer regex, at least for me
Download Code
Replies are listed 'Best First'.
Re^2: Stuck in komplexer regex, at least for me
by xicheng (Sexton) on Mar 26, 2007 at 23:05 UTC
    Hi, You need an anchor '^' to make sure the matchings start from the beginning of your strings..and your requirements might be written into two patterns which would be much easier to understand(the order of two s/// expressions matters)..
    #!/usr/bin/perl
    use warnings;
    use strict;
    
    while(<DATA>) {
        s/^(\d\d[1-9])0(?=[1-9])/$1/;
        s/^(\d\d(?:[1-9]0)?)0+/$1/;
    
        print;
    }
    
    __DATA__
    215000007801
    300000324002
    890000457651
    210004563401
    201045139158
    
    Regards,
    Xicheng

      your right 2 patterns look easyer,

      i am testing atm 5 million numbers and afterwards they will check with the system, then i know if all fit are some fail.

      same testing atm for the regex fanboy pattern ;)

      thx alot for the quick and very good help
      kd ultibuzz



      UPDATE:there is a problem with numbers like

      215100069395
      215100069395
      215100153821
      they shoud change into
      215169395
      215169395
      2151153821
      
      but they remained unchanged

      UPDATE 2:i have it running with an if loop, if digit 2 or 3 is 0 use new pattern else my old one ^^
      this isn't nice at all and i don't like it ;)

Log In?
Username:
Password:

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://606641]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others chilling in the Monastery: (12)
As of 2015-07-31 12:07 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    The top three priorities of my open tasks are (in descending order of likelihood to be worked on) ...









    Results (276 votes), past polls