OVH Cloud OVH Cloud

bug dans regexx - bouteille à la mer

16 réponses
Avatar
news.wanadoo.fr
Salut à toutes et tous,

je rencontre un problème avec regexx.
plutôt qu'un long discours voici le programme que je compile :

// DEBUT DU PROGRAMME --------------------------------
#include <stdio.h>
#include <regexx.hh>

using namespace std;
using namespace regexx;

string s="coucou";
string c="c";

main()
{
Regexx z;
try {
i=z.exec(s,c,Regexx::global|Regexx::newline);
}
catch(Regexx::CompileException &e)
{
cout << "compile-exception : " << e.message() << "\n";
exit(1);
}
catch(...)
{
cout << "Exception exceptionnelle !\n";
}
cout << "matches=" << z.matches() << "\n";
}
// FIN DU PROGRAMME -----------------

si je l'execute, j'obtiens "matches=2", ce qui est correct.

Si je change la ligne :
string c="c"; par : string="[c";
(je mets volontairement une erreur dans mon expression régulière)

si je l'execute, j'obtiens "compile-exception : missing terminating ] for
character class", ce qui est toujours correct.

Si je change la ligne :
string c="c"; par : string="c*";

si je l'execute, j'obtiens (après quelques secondes), un sibyllin :
"Aborted", ce qui n'est pas correct, évidemment....


Une âme charitable saura m'expliquer pourquoi et/ou vérifier de son côté le
même problème de comportement ?


Pour info, le compilateur : gcc version 3.3.3 (SuSE Linux)

D'avance, merci pour les éventuelles réponses ;-)


François Otho

10 réponses

1 2
Avatar
Stan
"news.wanadoo.fr" a écrit dans le
message de news: 43141852$0$1748$
Si je change la ligne :
string c="c"; par : string="c*";


si je l'execute, j'obtiens (après quelques secondes), un sibyllin :
"Aborted", ce qui n'est pas correct, évidemment....


Une âme charitable saura m'expliquer pourquoi et/ou vérifier de son côté
le même problème de comportement ?




A tout hasard, que donne string c = "c.*" ?
Je suppose que par string="c*"; vous voulliez écrire string c = "c*" ?

--
-Stan


Avatar
F.Otho

A tout hasard, que donne string c = "c.*" ?
Je suppose que par string="c*"; vous voulliez écrire string c = "c*" ?


oups, oui en effet, je me suis trompé ...
il faut lire, évidemment, string c= "c*"
(idem pour l'autre cas string c = "[c" ) ...

sinon, en mettant "c.*" ça renvoie : "matches=1" ce qui est logique
Mais ce qui ne correspond pas à la recherche souhaitée...
car "c*" est bien différent de "c.*".
et de toute façon "c*" plante le programme,
et c'est ce point là que je ne comprends pas.

en tout cas, merci pour la réponse...

à suivre...

F.Otho

Avatar
Stan
"F.Otho" a écrit dans le message de
news: 43142b58$0$978$


A tout hasard, que donne string c = "c.*" ?
Je suppose que par string="c*"; vous voulliez écrire string c = "c*" ?


oups, oui en effet, je me suis trompé ...
il faut lire, évidemment, string c= "c*"
(idem pour l'autre cas string c = "[c" ) ...

sinon, en mettant "c.*" ça renvoie : "matches=1" ce qui est logique
Mais ce qui ne correspond pas à la recherche souhaitée...
car "c*" est bien différent de "c.*".
et de toute façon "c*" plante le programme,
et c'est ce point là que je ne comprends pas.



Certe, il n'est pas normal que le prog plante...
Mais qu'attends -tu comme comportement avec le pattern "c*" ?

--
-Stan


Avatar
F.Otho
"Stan" ( remove the dots )> a écrit
Certe, il n'est pas normal que le prog plante...
Mais qu'attends -tu comme comportement avec le pattern "c*" ?


Ben rien de spécial, simplement, ça ne marche pas dans
ce cas-là (mais dans d'autres aussi, notamment en utilisant les
'jokers' * et ? accolés à une lettre )...

Cela cache, donc, soit un bug de ma part, soit un bug dans la librairie.

J'ai une préférence pour la première option... Mais je ne vois pas où
pourrait être l'erreur.

C'est pour cela que je m'adresse à des personnes compétentes
qui, éventuellement, pourrait faire un test de leur côté pour
confirmer au moins dans un premier le dysfonctionnement.

F.Otho

Avatar
kanze
news.wanadoo.fr wrote:

je rencontre un problème avec regexx.


Je ne connais pas cette bibliothèque. Pourquoi pas boost::regex?

plutôt qu'un long discours voici le programme que je compile :

Si je change la ligne :
string c="c"; par : string="c*";

si je l'execute, j'obtiens (après quelques secondes), un
sibyllin : "Aborted", ce qui n'est pas correct, évidemment....


Je parierai à une erreur dans la bibliothèque quand l'expression
donnée peut correspondre à une chaîne vide. Chose qui n'a
peut-être pas été testé, parce que d'une utilité douteuse. (Ce
n'est pas une excuse -- ça doit marcher, en donnant pour
"coucou" 7 matchs.)

--
James Kanze GABI Software
Conseils en informatique orientée objet/
Beratung in objektorientierter Datenverarbeitung
9 place Sémard, 78210 St.-Cyr-l'École, France, +33 (0)1 30 23 00 34

Avatar
F.Otho

je rencontre un problème avec regexx.


Je ne connais pas cette bibliothèque. Pourquoi pas boost::regex?


hum, ... bon ok, je vais partir vers ça...

quelle perte de temps....

merci quand même à tous,

F.Otho


Avatar
F.Otho
"F.Otho" a écrit
je rencontre un problème avec regexx.
Je ne connais pas cette bibliothèque. Pourquoi pas boost::regex?

"F.Otho" a écrit


hum, ... bon ok, je vais partir vers ça...
quelle perte de temps....


Pour que d'autres puissent comprendre et utiliser boost:regex...
je vous livre deux liens :

www.boost.org (bien sûr, ;-)) )
et
http://boost-sandbox.sourceforge.net/libs/xpressive/doc/html/xpressive/examples.html

le deuxieme (lien) livre des exemples que les rédacteurs du premier (lien)
devraient reprendre : car, chez boost, au niveau des exemples, c'est
"pourquoi faire simple quand on peut faire compliquer"....

Puisse ce message servir, à au moins une personne, dans 1 jour ou dans 10
ans...si les liens sont encore existants ;-|

F.Otho



Avatar
Stan
"F.Otho" a écrit dans le message de
news: 43156866$0$7821$
www.boost.org (bien sûr, ;-)) )
et
http://boost-sandbox.sourceforge.net/libs/xpressive/doc/html/xpressive/examples.html

le deuxieme (lien) livre des exemples que les rédacteurs du premier (lien)
devraient reprendre : car, chez boost, au niveau des exemples, c'est
"pourquoi faire simple quand on peut faire compliquer"....



Ben moi je les trouve très bien ces exemples.
Je voudrais juste te poser une question :

Tu les utilises souvent les expressions rationnelles ( à part pour le projet
en question )?

--
-Stan

Avatar
F.Otho
news: 43156866$0$7821$
www.boost.org (bien sûr, ;-)) )
et
http://boost-sandbox.sourceforge.net/libs/xpressive/doc/html/xpressive/examples.html

le deuxieme (lien) livre des exemples que les rédacteurs du premier
(lien) devraient reprendre : car, chez boost, au niveau des exemples,
c'est "pourquoi faire simple quand on peut faire compliquer"....



Ben moi je les trouve très bien ces exemples.
Je voudrais juste te poser une question :

Tu les utilises souvent les expressions rationnelles ( à part pour le
projet en question )?
-Stan


Je sens comme de l'ironie dans ta question ...

Oui je m'en sers souvent, mais plutôt en perl ou en shell ou dans awk...
Et actuellement je transforme tous ces scripts en programme c++
d'où mes recherches sur les expressions régulières dans ce langage.
Je voudrais en réalité trouver quelque chose d'extremement standard.
Malheureusement, aujourd'hui, en 2005, soit au XXI siecle, rien n'est encore
intégré dans la librairie standard...
Toutefois, si j'ai bien compris, boost semble bien en vue, d'où mon choix.

En ce qui concerne les exemples je trouve ceux fournis par "Eric Niebler"
l'auteur de
http://boost-sandbox.sourceforge.net/libs/xpressive/doc/html/xpressive/examples.html
beaucoup plus ... immédiats (?).

F.Otho


Avatar
Stan
"F.Otho" a écrit dans le message de
news: 43157be3$0$17219$

Je sens comme de l'ironie dans ta question ...


Non de la curiosité.

d'où mes recherches sur les expressions régulières dans ce langage.
Je voudrais en réalité trouver quelque chose d'extremement standard.
Malheureusement, aujourd'hui, en 2005, soit au XXI siecle, rien n'est
encore
intégré dans la librairie standard...


C'est pour bientot, me semble-t-il.

Toutefois, si j'ai bien compris, boost semble bien en vue, d'où mon choix.
En ce qui concerne les exemples je trouve ceux fournis par "Eric Niebler"
l'auteur de
http://boost-sandbox.sourceforge.net/libs/xpressive/doc/html/xpressive/examples.html
beaucoup plus ... immédiats (?).



Normalement tu devrait pouvoir rapidement tester l'expression qui te pose
pb.
Tiens nous au courant afin de savoir si le comportement est le même...


--
-Stan

1 2