Beefy Boxes and Bandwidth Generously Provided by pair Networks
We don't bite newbies here... much
 
PerlMonks  

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.


Comment on Re: Stuck in komplexer regex, at least for me
Download Code
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
Node Status?
node history
Node Type: note [id://606622]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others making s'mores by the fire in the courtyard of the Monastery: (11)
As of 2014-11-28 12:53 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    My preferred Perl binaries come from:














    Results (196 votes), past polls