a fixed bit: a,variable,length, repeated, bit [some more fixed stuff]
more fixed: more,variable,stuff [more fixed]
####
while( my $data = ) {
$data =~ m[^
( [\w\s]+ ) :
( [^\x5b]+ ) \x5b
( [^\x5d]+ ) \x5d
]x;
my ($first_bit, $last_bit) =( $1, $3 );
my @variable_bits = $2 =~ m[(\w+)[,\s]]g;
print "$first_bit: (@variable_bits) [$last_bit]";
}
##
##
#! perl -slw
use strict;
use re 'eval';
our ($num, $firstwords, $bracketed, $label, @bits, $pre_bit, $in_bit, $post_bit);
my $re = qr[
(?{
our($num, $firstwords, $bracketed, $label, $pre_bit, $in_bit, $post_bit, @bits)
= ( (undef) x 7, () );
})
(\d+) : (?{ our $num = $^N })
([^\x5b]+?) \x5b (?{ our $firstwords = $^N })
([^\x5d]+?) \x5d (?{ our $bracketed = $^N })
([^:]+) : \s* (?{ our $label = $^N })
(?x-ism: ( [^,\s]+? ) [,\s] (?{ push our @bits, $^N }) )+?
\s* \x5b
(\w+) \( (?{ our $pre_bit = $^N })
([\w ]+) \) (?{ our $in_bit = $^N })
(\w+) (?{ our $post_bit = $^N })
\x5d
]x;
while( ) {
print "$num : $firstwords [ $bracketed ] $label : [@bits] [ $pre_bit ( $in_bit ) $post_bit ]"
if $_ =~ $re;
}
__DATA__
1: or more [semi-fixed] fields: and,some,variable,length,stuff [more(fixed)stuff]
2: kind of [similarly] formated: records,with,variable,differences [embedded(in the)records]