Beefy Boxes and Bandwidth Generously Provided by pair Networks
Don't ask to ask, just ask

Re: Stuck in komplexer regex, at least for me

by saintly (Scribe)
on Mar 26, 2007 at 17:17 UTC ( #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?

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://606622]
and all is quiet...

How do I use this? | Other CB clients
Other Users?
Others having an uproarious good time at the Monastery: (3)
As of 2018-01-21 05:59 GMT
Find Nodes?
    Voting Booth?
    How did you see in the new year?

    Results (227 votes). Check out past polls.