bugzilla-regexps_hints

This is part of The Pile, a partial archive of some open source mailing lists and newsgroups.



To: =?ISO-8859-1?Q?Jean-S=E9bastien_Guay?=
From: Kevin Maples <kmaples@collab.net>
Subject: Re: OT : Regexp tips
Date: Tue, 22 Oct 2002 14:09:09 -0700

Heya,

An answer is below; don't peek if you don't need to.

The simple answer to the problems you were having with the regex is your 
use of parens for both grouping and capture (see the diagram below), and 
your use of 'zero or more' (*) in cases that you likely meant 'one or 
more' (+), particularly in the case of whitespace (which seems to be 
your delimiter).  The match that you're working with is slightly 
complicated by the fact that the beginning and ending of the user's name 
isn't distinguished from whitespace inside the name, and in cases like 
that, I find it easier to say 'anything which is not something' 
(e.g., [^\]]) than trying to catch all the possibilities.

Keep in mind that perl captures matches in parens counting opening 
parens left-to-right (not when parens close); this may have given you an 
off-by-one error in your count.  If you were trying to say that the 
entire clause past yes/no is optional, you could try starting person at 
4 (instead of 3).

Hope that helps,

- Kevin

<spoiler>

my @strings = (
     'Animation    1     Jean-Yves Audouard [Shok] [xsi] wip',
     'Annotation   0     Kevin Maples [regex] [perl] blap',
);

foreach( @strings ){

     # compare to:
     # m/^(\w*)\s*(\w)(\s*([\w\s]*)\[([\w\s]*)\]\s\[([\w\s]*)\]\s(.*)|)$/;
     #    ^---^   ^--^^-----------------------------------------------^ 
(1,2,3)
     #                    ^-------^  ^-------^      ^-------^    ^--^   
(4,5,6,7)
     #

     m/^(\w+)\s+(\d+)\s+([^\]]+)\s+\[([^\]]+)\]\s+\[([^\]]+)\]\s+(\w+)/;

     my ($taskname, $yesno, $person, $component, $software, $status) =
         ($1, $2, $3, $4, $5, $6);

     print "----------------------------\n";
     print "task:    $taskname\n";
     print "yes:     $yesno\n";
     print "person:  $person\n";
     print "comp:    $component\n";
     print "soft:    $software\n";
     print "status:  $status\n";

}

</spoiler>

On Tuesday, October 22, 2002, at 01:34 PM, Jean-S

the rest of The Pile (a partial mailing list archive)

doom@kzsu.stanford.edu