Sick? It should!!! But gives me the result I want. Thanks a bunch for
that.
Yes the perldoc for perlre says that it is 'experimental feature' and
'don't try this at home!'.
Honestly, is this going to go away?

I was going to escalate this to MJD / Jeffrey Friedl. Wonder what they
would suggest?

For many of you, who think I am nuts, this kind of data structure is
very common in legacy computing platforms. Internal data structure for
many file systems allow multiple occurrences based on a count, although
they are fixed length strings rather than delimited by something. With
regex, I can add the delimiter magic to it!

Thanks Anthony for the contribution..

---Closing information gaps-----
Ranga Nathan, Reliance Technology
>>SEVIS solution now! http://goreliance.com
>>Live demo at http://any2xml.com/docs/timesheet_demo.shtml<<
>>Get free COBOLExplorer at http://goreliance.com/download-products <<

> -----Original Message-----
> From: [EMAIL PROTECTED] 
> [mailto:boston-pm-admin@;mail.pm.org] On Behalf Of Anthony R. J. Ball
> Sent: Friday, October 11, 2002 4:17 PM
> To: Ranga Nathan
> Cc: [EMAIL PROTECTED]
> Subject: Re: [Boston.pm] Calling regex gurus ..A regex question..
> 
> 
> 
>  HA! Here is a pure regexp that will verify that string for you...
> 
>  This oughtta make some people sick...
> 
> $str = '02 s1n1 s1n2 3 s2n1 s2n2 s2n3 1 s3n1 4 s4n1 s4n2 s4n3 s4n4';
> 
> if($str =~ /^((\d+)\s+(??{ my $re = 's\d+n\d+\s*'x$+; 
> qr($re); }))+$/) {
>       print "MATCH\n";
> }
> 
> 
> seemed to work with my limited testing...
> 
> On Fri, Oct 11, 2002 at 03:40:31PM -0400, Anthony R. J. Ball wrote:
> > 
> > 
> > I am coming into this late... but I would use \G
> > 
> > $str = '02 s1n1 s1n2 3 s2n1 s2n2 s2n3 1 s3n1 4 s4n1 s4n2 s4n3 s4n4';
> > 
> > while($str =~ /\G\s*(\d+)/g) {
> >     my $cnt = $1;
> >     my @d;
> > 
> >     my $re = '\s*(s\dn\d)' x $cnt;
> > 
> >     if($str =~ /\G$re/g) {
> >         @d = ($1,$2,$3,$4,$5,$6,$7,$8,$9);
> >         print "Got $cnt: @d\n";
> >     } else {
> > 
> >         print "ERROR\n";
> >     }
> > 
> > }
> > 
> > of course...  its a little kludgy... but assigning the regexp to an 
> > array unfortunately puts the g modifier in a list context, 
> which blows 
> > screws up the whole thing...
> > 
> > Other code would have to be implemented to check for bad trailing 
> > data...
> > 
> > there is also, of course...
> > 
> > $str =~ s/\s*(\d+)((?:\s+s\d+n\d+)*)/check($1,$2)/ge;
> > 
> > sub check {
> >     my($cnt, $data) = @_;
> >     my @d = split /\s+/, $data;
> >     shift @d; #leading space
> >     if($cnt == @d) {
> >         print "Got $cnt: @d\n";
> >     } else {
> >         print "Error, expected $cnt, got ",scalar(@d),"\n";
> >     }
> > }
> > 
> > 
> > This is probably easier to deal with...
> > 
> > 
> > 
> > 
> > On Fri, Oct 11, 2002 at 02:20:13PM -0400, Ranga Nathan wrote:
> > > Thanks guys that was quick response;
> > > In the context of Any2XML, which forces me to use a regex for 
> > > top-down parsing, I need to use regex. Even if the regex is slow, 
> > > that is fine. If it is impossible to do this in regex, of 
> course, I 
> > > would resort to split().
> > > 
> > > Can this be done using regex? Why does \1 not work? These are my 
> > > questions.
> > > 
> > > Thanks again...
> > > 
> > > ---Closing information gaps-----
> > > Ranga Nathan, Reliance Technology
> > > >>SEVIS solution now! http://goreliance.com
> > > >>Live demo at http://any2xml.com/docs/timesheet_demo.shtml<<
> > > >>Get free COBOLExplorer at 
> http://goreliance.com/download-products 
> > > >><<
> > > 
> > > > -----Original Message-----
> > > > From: [EMAIL PROTECTED]
> > > > [mailto:boston-pm-admin@;mail.pm.org] On Behalf Of Mark Aisenberg
> > > > Sent: Friday, October 11, 2002 2:15 PM
> > > > To: [EMAIL PROTECTED]
> > > > Subject: RE: [Boston.pm] Calling regex gurus ..A regex 
> question..
> > > > 
> > > > 
> > > > Your '\1' question aside:
> > > > Your solution requires you to know the number of patterns in
> > > > the string. For long strings, a regex could be slow. Why not 
> > > > just 'split' on whitespace into an array and then use array 
> > > > indices to easily extract the items you want?
> > > > 
> > > > 
> > > > 
> > > > 
> > > > -----Original Message-----
> > > > From: [EMAIL PROTECTED] 
> > > > [mailto:boston-pm-admin@;mail.pm.org]
> > > > On Behalf Of Ranga Nathan
> > > > Sent: Friday, October 11, 2002 1:42 PM
> > > > To: [EMAIL PROTECTED]
> > > > Subject: [Boston.pm] Calling regex gurus ..A regex question..
> > > > 
> > > > 
> > > > I need to parse a string that has multiple occurrences of a
> > > > pattern that is determined by an embeded count. For example:
> > > > 
> > > > 02 s1n1 s1n2 3 s2n1 s2n2 s2n3 1 s3n1 4 s4n1 s4n2 s4n3 s4n4
> > > > 
> > > > 02 is the count and I need to extract s1n1 and s2n2
> > > > 
> > > > 3 is the count and  I need to extract s2n1, s2n2 and s2n3
> > > > 
> > > > And so on.
> > > > 
> > > > So I tried to do:
> > > > $var =
> > > > /(.*?)\s+((?:.*?\s+){\1})(.*?)\s+((?:.*?\s+){\3})(.*?)\s+((?:.
> > > > *?\s+){\5}
> > > > )/;
> > > > 
> > > > And was expecting "02" "s1n1 s1n2 " "3" "s2n1 s2n2 s2n3 " "1"
> > > > "s3n1 " "4" "s4n1 s4n2 s4n3 s4n4 " as matches.
> > > > 
> > > > This does not work.
> > > > The \1, \2 etc are not evaluated as 'iterators'. I tried the
> > > > experimental ?{} too.
> > > > 
> > > > 
> > > > 
> > > > ---Closing information gaps-----
> > > > Ranga Nathan, Reliance Technology
> > > > >>SEVIS solution now! http://goreliance.com
> > > > >>Live demo at http://any2xml.com/docs/timesheet_demo.shtml<<
> > > > >>Get free COBOLExplorer at 
> > > > >>http://goreliance.com/download-products <<
> > > > 
> > > > _______________________________________________
> > > > Boston-pm mailing list
> > > > [EMAIL PROTECTED] 
> > > > http://mail.pm.org/mailman/listinfo/boston-pm
> > > > 
> > > > 
> > > > 
> > > > _______________________________________________
> > > > Boston-pm mailing list
> > > > [EMAIL PROTECTED] 
> > > > http://mail.pm.org/mailman/listinfo/boston-pm
> > > > 
> > > 
> > > _______________________________________________
> > > Boston-pm mailing list
> > > [EMAIL PROTECTED] 
> http://mail.pm.org/mailman/listinfo/boston-pm
> > 
> > -- 
> >  ___ 
>  __  __    __  _  _  ____    _  _  ____  ____ 
> > / __)(  )(  )  /__\( \/ )( ___)  ( \( )( ___)(_  _)
> > \__ \ )(__)(  /(__)\\  /  )__)    )  (  )__)   )(  
> > (___/(______)(__)(__)\/  (____)()(_)\_)(____) (__)
> > "Say, this a little bit of all right!" - Die Fladermaus
> > 
> > _______________________________________________
> > Boston-pm mailing list
> > [EMAIL PROTECTED] http://mail.pm.org/mailman/listinfo/boston-pm
> 
> -- 
>  ___  __  __    __  _  _  ____    _  _  ____  ____ 
> / __)(  )(  )  /__\( \/ )( ___)  ( \( )( ___)(_  _)
> \__ \ )(__)(  /(__)\\  /  )__)    )  (  )__)   )(  
> (___/(______)(__)(__)\/  (____)()(_)\_)(____) (__) 
> "Smoke me a kipper & I'll be back for breakfast" Ace, Red Dwarf
> 
> _______________________________________________
> Boston-pm mailing list
> [EMAIL PROTECTED] http://mail.pm.org/mailman/listinfo/boston-pm
> 

_______________________________________________
Boston-pm mailing list
[EMAIL PROTECTED]
http://mail.pm.org/mailman/listinfo/boston-pm

Reply via email to