OVH Cloud OVH Cloud

Problème de RE....

6 réponses
Avatar
Goudvin Emmanuel
Bonjour,

J'essaye de récupérer mes 2 valeurs 'value 1' et 'value 2' de la chaine
suivante:

my $x = "sjbdqksdbq ((value 1)) lqnfsd fsdfsd ((value 2))fsdfsdf sdfsd";

my @x = ($x =~ m/\(\((.*)\)\)/g);
ne donne pas le bon résultat (une seule occurence)...

Ps: les 'valeurs peuvent éventuellement contenir des parentheses !

Merci.

6 réponses

Avatar
DominiX
ici même Goudvin Emmanuel a écrit
Bonjour,

J'essaye de récupérer mes 2 valeurs 'value 1' et 'value 2' de la
chaine suivante:

my $x = "sjbdqksdbq ((value 1)) lqnfsd fsdfsd ((value 2))fsdfsdf
sdfsd";

my @x = ($x =~ m/(((.*)))/g);
ne donne pas le bon résultat (une seule occurence)...


salut

voir Regexp::Common::balanced


Ps: les 'valeurs peuvent éventuellement contenir des parentheses !


ca va se compliquer alors ...


Merci.



-- dominix

Avatar
DominiX
ici même:Goudvin Emmanuel a écrit
Bonjour,

J'essaye de récupérer mes 2 valeurs 'value 1' et 'value 2' de la
chaine suivante:

my $x = "sjbdqksdbq ((value 1)) lqnfsd fsdfsd ((value 2))fsdfsdf
sdfsd";

my @x = ($x =~ m/(((.*)))/g);
ne donne pas le bon résultat (une seule occurence)...



'scusez le repost
.* est greedy (gourmand) il faut le limiter
my @x = ($x =~ m/((([^)]*)))/g);

ou le rendre moins gourmand
my @x = ($x =~ m/(((.*?)))/g);



Ps: les 'valeurs peuvent éventuellement contenir des parentheses !

Merci.



-- dominix

Avatar
Jérémy JUST
On Sun, 21 Nov 2004 17:33:29 +0000
Goudvin Emmanuel wrote:

my @x = ($x =~ m/(((.*)))/g);
ne donne pas le bon résultat (une seule occurence)...


Tu as regardé ce que contenais cette occurrence? Elle contient tout ce
qui commence au premier `((' et fini au dernier `))', parce que le
quantificateur `*' est gourmand (il mange le plus possible).
Essaie l'opérateur parcimonieux `*?':

m/(((.*?)))/g


Ps: les 'valeurs peuvent éventuellement contenir des parentheses !


Si elles ne contiennent pas `))', c'est bon.

--
Jérémy JUST

Avatar
Damien GUERIN
"Goudvin Emmanuel" a écrit dans le message de
news: hj3od.16576$
Bonjour,

J'essaye de récupérer mes 2 valeurs 'value 1' et 'value 2' de la chaine
suivante:

my $x = "sjbdqksdbq ((value 1)) lqnfsd fsdfsd ((value 2))fsdfsdf sdfsd";

my @x = ($x =~ m/(((.*)))/g);
ne donne pas le bon résultat (une seule occurence)...

Ps: les 'valeurs peuvent éventuellement contenir des parentheses !

Merci.


Bonsoir,

my @x = ();
my $x = "sjbdqksdbq ((value 1)) lqnfsd fsdfsd ((value 2))fsdfsdf sdfsd";
while ($x =~ s/(((.*)))//) {
push @x,$1;
}

devrait fonctionner mais je sais pas si ça va vous convenir...

A+

Avatar
Goudvin Emmanuel
DominiX wrote:



ici même:Goudvin Emmanuel a écrit
Bonjour,

J'essaye de récupérer mes 2 valeurs 'value 1' et 'value 2' de la
chaine suivante:

my $x = "sjbdqksdbq ((value 1)) lqnfsd fsdfsd ((value 2))fsdfsdf
sdfsd";

my @x = ($x =~ m/(((.*)))/g);
ne donne pas le bon résultat (une seule occurence)...



'scusez le repost
.* est greedy (gourmand) il faut le limiter
my @x = ($x =~ m/((([^)]*)))/g);

ou le rendre moins gourmand
my @x = ($x =~ m/(((.*?)))/g);


Marche nickel.

Merci.




Ps: les 'valeurs peuvent éventuellement contenir des parentheses !

Merci.



-- dominix



Avatar
Jacques Noël
J'essaye de récupérer mes 2 valeurs 'value 1' et 'value 2' de la
chaine suivante:

my $x = "sjbdqksdbq ((value 1)) lqnfsd fsdfsd ((value 2))fsdfsdf
sdfsd";

my @x = ($x =~ m/(((.*)))/g);
ne donne pas le bon résultat (une seule occurence)...


.* est greedy (gourmand) il faut le limiter
my @x = ($x =~ m/((([^)]*)))/g);

ou le rendre moins gourmand
my @x = ($x =~ m/(((.*?)))/g);


Marche nickel.


Ps: les 'valeurs peuvent éventuellement contenir des parentheses !





Bonjour,

Sauf erreur de la part, la première solution ( avec [^)]* ) ne fonctionne
pas si la valeur contient une parenthèse fermante ")"

Jacques Noël.