[gull] email
Daniel Cordey
dc at mjt.ch
Thu Sep 22 16:26:54 CEST 2005
On Thursday 22 September 2005 15:47, Frederic Schutz wrote:
> Je ne peux pas parler pour sed, mais ce n'est pas forcement le cas pour
> Perl.
A ma connaissance, tous les programmes utilisant des RE font appel a :
- regcomp(3)
"...regcomp is used to compile a regular expression into a form that is
suitable for subsequent regexec searches.
regcomp is supplied with preg, a pointer to a pattern buffer storage area;
regex, a pointer to the null-terminated string and cflags, flags used to
determine the type of compilation.
All regular expression searching must be done via a compiled pattern buffer,
thus regexec must always be supplied with the address of a regcomp
initialized pattern buffer..."
- regexex(3)
"... regexec is used to match a null-terminated string against the
precompiled pattern buffer, preg. ..."
C'est relativement incontournable :-)
> Par exemple, "Programming Perl" recommande d'utiliser
>
> /one/ || /two/
>
> au lieu de
>
> /one|two/
>
> La justification est que comme les 2 expressions sont tres simples, elles
> peuvent etre optimisees en utilisant l'algorithme de Bayer-Moore, qui est
> tres efficace. Moore. Par contre, des qu'il y a un "|" dans
> l'expression, il faut
> utiliser du code generique qui est beaucoup plus lent.
Je suspecte que Perl effectue une pre-optimisation des ER, avant de faire
appel aux deux fonctions citees plus-haut.
dc
More information about the gull
mailing list