Beefy Boxes and Bandwidth Generously Provided by pair Networks
There's more than one way to do things
 
PerlMonks  

Re: validate variable-length lines in one regex?

by stevieb (Canon)
on Jul 06, 2015 at 20:15 UTC ( [id://1133434]=note: print w/replies, xml ) Need Help??


in reply to validate variable-length lines in one regex?

This is a huge stab in the dark here, but I thought I'd give it a try. On the last line of the regex, it uses a code evaluation expression (which I believe is still experimental) to set the @cts array using the last unused portion of the line in an internal, separate regex.

#!/usr/bin/perl use warnings; use strict; my %bad; while (<DATA>){ chomp; my @cts; my ($t, $p, $s, $d) = (/^([A-Z]\d\d)\s+ # $t (1?\d)\s+ # $p (\d?\d(?:\.1)?)\s+ # $s ([0-3])\s+ # $d (?{@cts = $' =~ m#(\d?\d\.\d)#g}) # @cts /x) or ($bad{$_}++) && next; print join(' ', @cts); print "\n"; } print "\nPrinting bad lines:\n"; while (my ($k, $v) = each %bad){ print "$k: $v\n"; } __DATA__ C31 6 3 2.4 1.5 2.6 C32 2 7 3 1.0 H31 1 1 0 21.0 11.2 5.3 1.4 T11 2 1 0 6.0 1.1 2.2 L06 1 1 0 1.0 3.3 L06 1 4 0 1.1 1.8 __END__ 1.0 21.0 11.2 5.3 1.4 6.0 1.1 2.2 1.0 3.3 1.1 1.8 Printing bad lines: C31 6 3 2.4 1.5 2.6 : 1

On one long line, the regex would look like this (note I've replaced your literal spaces with \s):

/^([A-Z]\d\d)\s+(1?\d)\s+(\d?\d(?:\.1)?)\s+([0-3])\s+(?{@cts = $' =~ m +#(\d?\d\.\d)#g})/

-stevieb

Replies are listed 'Best First'.
Re^2: validate variable-length lines in one regex?
by uhClem (Scribe) on Jul 06, 2015 at 20:47 UTC
    Hm. Also cool, and formally satisfies my Big Question -- but on the other hand... you know... eval.... Seems sneaky. I'm just saying. Might not want my daughter to marry one.

Log In?
Username:
Password:

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

How do I use this?Last hourOther CB clients
Other Users?
Others examining the Monastery: (4)
As of 2024-04-16 05:34 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found