git/list[1] front-page[2] threads[3] people[4] search[5] about
 

Re: [PATCH] git send-email: edit recipient addresses with the --compose flag

From
FGFrancis Galiegue <fg@one2team.com>
Date
Nov 10, 2008, 07:49 UTC
Message-ID
<200811100849.36736.fg@one2team.com>
In-Reply-To
<alpine.LFD.2.00.0811091910570.21142@sys-0.hiltweb.site>
Le Monday 10 November 2008 01:38:30 Ian Hilt, vous avez écrit :
Show 25 quoted lines
> On Sun, 9 Nov 2008, Junio C Hamano wrote:
> > Ian Hilt <ian.hilt@gmx.com> writes:
> > > On Sun, 9 Nov 2008, Francis Galiegue wrote:
> > >> Le Sunday 09 November 2008 13:59:48 Ian Hilt, vous avez écrit :
> > >> > +	if ($c_file =~ /^To:\s*+(.+)\s*\nCc:/ism) {
> > >>
> > >> Greedy operators are only supported with perl 5.10 or more... I think
> > >> it's a bad idea to use them...
> > >
> > > The problem here was that a space should follow the field, but it may
> > > not.  The user may unwarily backup over it.  "\s*" would match this
> > > case.
> > >
> > > But if there is a space, it is included in the "(.+)".  So I tried
> > > "\s+", which did not include the space, but it won't include the first
> > > address if there isn't a space after the field.
> > >
> > > The quantified subpattern seemed to do the trick.  But, if it could
> > > result in a dependency issue, I would agree this would be a bad idea.
> >
> > You expect something non-blank there anyway, so why not do:
> >
> > 	To:\s*(\S.*?)\s*\n....
>
> That works.  Although, I seem to be missing Francis' point.

No. The _lazy_ quantifiers (*?, ??, *?, +?, {...}?) are supported all right. But they should be avoided in general.

Show 5 quoted lines
> According 
> to perlre, a quantified subpattern is "greedy".  So a "greedy operator"
> is any one of the standard quantified subpatterns.  The "+" and "?"
> modify its matching behavior.  And it seems to me that it _has_ to use a
> q.s. to work ...

My wording may be bad, then. They're not greedy, they just don't allow for backtracking. They are more than greedy. Let me explain.

Consider "number 42" for instance. If you match it against:
* .*(\d+) => $1 would be "2": the * eats everything but _has_ to backtrack for 
\d+ to get anything, but just one number is enough;
* .*?(\d+) => $1 would be "42": as *? is lazy, this means that after each 
match, it looks to see whether the next element in the regex would match 
anything; as soon as \d+ matches 4, .*? stops there;
* .*+(\d+) => $1 would match nothing! *+ eats everything, but the + afterwards 
_doesn't allow it to backtrack_.

I hope this makes things a little clearer ;) I think the correct term for *+, ++, ?+ etc is "possessive" quantifiers, I'm just not sure.

-- 
Francis Galiegue
ONE2TEAM
Ingénieur système
Mob : +33 (0) 6 83 87 78 75
Tel : +33 (0) 1 78 94 55 52
fge@one2team.com
40 avenue Raymond Poincaré
75116 Paris
Previous: Ian HiltNext: Aristotle Pagaltzis
Message 8 of 17 in “git send-email: edit recipient addresses with the --compose flag”
  1. git send-email: edit recipient addresses with the --compose flagIan Hilt, Nov 9, 2008
  2. Francis GaliegueNov 9, 2008
  3. Ian HiltNov 9, 2008
  4. Junio C HamanoNov 9, 2008
  5. Ian HiltNov 10, 2008
  6. Junio C HamanoNov 10, 2008
  7. Ian HiltNov 10, 2008
  8. Francis GaliegueNov 10, 2008
  9. Aristotle PagaltzisNov 10, 2008
  10. TaitNov 11, 2008
  11. Francis GaliegueNov 11, 2008
  12. Ian HiltNov 11, 2008
  13. Ian HiltNov 11, 2008
  14. Francis GaliegueNov 11, 2008
  15. TaitNov 11, 2008
  16. Francis GaliegueNov 10, 2008
  17. Francis GaliegueNov 10, 2008

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.