Beefy Boxes and Bandwidth Generously Provided by pair Networks
Your skill will accomplish
what the force of many cannot
 
PerlMonks  

Re: Stuck in komplexer regex, at least for me

by saintly (Scribe)
on Mar 26, 2007 at 17:17 UTC ( [id://606622]=note: print w/replies, xml ) Need Help??


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

Well, I can make a ruleset that seems to fit:
  1. Always keep the first two numbers intact
  2. If any zeros start at position 3, remove them all.
  3. If you didn't do that, then if two or more zeros start after position 3, truncate them to a single 0
  4. If you didn't do either of the first two techniques, then remove a single 0 starting at position 3 or later entirely.

What happens if a single 0 starts at position 3? What does '35010333356' turn into?

Here's my code:
#!/usr/bin/perl use strict; use warnings; use Test::More; my %output_for = ( '215000007801' => '21507801', '300000324002' => '30324002', '890000457651' => '89457651', '210004563401' => '214563401', '201045139158' => '20145139158', ); plan tests => scalar keys %output_for; while ( my ($input, $correct_output) = each %output_for ) { my $orig_input = $input; $input = &compress_numstring( $input ); is( $input, $correct_output, "Solved '$orig_input'" ); } sub compress_numstring { my $starting_num = shift; return $starting_num unless(defined $starting_num && $starting_num =~ /^(\d{2})(\d+)/); my( $keep, $modify ) = ($1,$2); ( $modify =~ s/^0+// ) || ( $modify =~ s/0{2,}/0/ ) || ( $modify =~ s/(?<!0)0([1-9]|$)/$1/ ); return $keep . $modify; }
It passes the validation test, but it may fail further tests since the rules aren't clearly spelled out.

Replies are listed 'Best First'.
Re^2: Stuck in komplexer regex, at least for me
by saintly (Scribe) on Mar 26, 2007 at 18:11 UTC
    (for the regex fanboys:
    sub compress_numstring { substr($_[0], 2) =~ s/(^0+|(0)0+|(?<!0)0([1-9]|$))/$2$3/; return $_[0]; }

    does the same thing as the other function, but with more job security)
    Unfortunately, 'use warnings' will complain.

Log In?
Username:
Password:

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

How do I use this?Last hourOther CB clients
Other Users?
Others drinking their drinks and smoking their pipes about the Monastery: (4)
As of 2026-04-13 07:48 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found

    Notices?
    hippoepoptai's answer Re: how do I set a cookie and redirect was blessed by hippo!
    erzuuliAnonymous Monks are no longer allowed to use Super Search, due to an excessive use of this resource by robots.