Beefy Boxes and Bandwidth Generously Provided by pair Networks
Perl: the Markov chain saw

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]
[Corion]: Whoa! Somebody forwarded the AnyEvent::Impl:: Prima loop to schmorp and he's even interested in maintaining it himself - that'd be highly convenient for me ;)
[Corion]: (I also have a mail by dk who suggests some additions, which I should add this evening)
[ambrus]: Corion: um, that was me (duh)
[ambrus]: I just can't get you two to cooperate directly because schmorp doesn't want to be in the chatterbox

How do I use this? | Other CB clients
Other Users?
Others musing on the Monastery: (8)
As of 2016-12-09 14:05 GMT
Find Nodes?
    Voting Booth?
    On a regular basis, I'm most likely to spy upon:

    Results (151 votes). Check out past polls.