J'ai =E9cris ce petit programme afin de remplacer des cha=EEnes qui se
partagent les m=EAmes caract=E8res comme ooo et oooo. Comment rendre la
RE strict de fa=E7on a ce que ce petit programme me donne ooos en vertu
de l'application de la premiere r=E8gle seulement.
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
Jérémy JUST
On 4 May 2005 10:26:03 -0700 wrote:
J'ai écris ce petit programme afin de remplacer des chaînes qui se partagent les mêmes caractères comme ooo et oooo. Comment rendre la RE strict de façon a ce que ce petit programme me donne ooos en vertu de l'application de la premiere règle seulement.
Je ne comprends pas bien ton explication. Tes chaînes « oooo » sont bien des séries de « o », ou bien elles représentent quelque chose de plus compliqué?
$a=~ s/ooo/ooos/g; #RE1 $b=~ s/ooooo/ooos/g;#RE2
Est-ce que ça répondrait à ton problème d'utiliser la valeur de retour de s/// pour décider que tu appliques la seconde regexp?
$a=~s/ooo/ooos/g or $b=~s/ooooo/ooos/g
Sinon, quelque chose comme ça:
$b=~s/o{3}|o{5}/ooos/g ^^^^^^^^^ L'ordre des termes de l'alternative définit une priorité (le premier qui matche est utilisé, quelle que soit sa longueur)
Si j'ai répondu à côté de la plaque, précise ton problème, avec un exemple plus explicite.
-- Jérémy JUST
On 4 May 2005 10:26:03 -0700
fred78980@yahoo.com wrote:
J'ai écris ce petit programme afin de remplacer des chaînes qui se
partagent les mêmes caractères comme ooo et oooo. Comment rendre la
RE strict de façon a ce que ce petit programme me donne ooos en vertu
de l'application de la premiere règle seulement.
Je ne comprends pas bien ton explication. Tes chaînes « oooo » sont
bien des séries de « o », ou bien elles représentent quelque chose de
plus compliqué?
$a=~ s/ooo/ooos/g; #RE1
$b=~ s/ooooo/ooos/g;#RE2
Est-ce que ça répondrait à ton problème d'utiliser la valeur de retour
de s/// pour décider que tu appliques la seconde regexp?
$a=~s/ooo/ooos/g or $b=~s/ooooo/ooos/g
Sinon, quelque chose comme ça:
$b=~s/o{3}|o{5}/ooos/g
^^^^^^^^^
L'ordre des termes de l'alternative définit une priorité
(le premier qui matche est utilisé, quelle que soit sa longueur)
Si j'ai répondu à côté de la plaque, précise ton problème, avec un
exemple plus explicite.
J'ai écris ce petit programme afin de remplacer des chaînes qui se partagent les mêmes caractères comme ooo et oooo. Comment rendre la RE strict de façon a ce que ce petit programme me donne ooos en vertu de l'application de la premiere règle seulement.
Je ne comprends pas bien ton explication. Tes chaînes « oooo » sont bien des séries de « o », ou bien elles représentent quelque chose de plus compliqué?
$a=~ s/ooo/ooos/g; #RE1 $b=~ s/ooooo/ooos/g;#RE2
Est-ce que ça répondrait à ton problème d'utiliser la valeur de retour de s/// pour décider que tu appliques la seconde regexp?
$a=~s/ooo/ooos/g or $b=~s/ooooo/ooos/g
Sinon, quelque chose comme ça:
$b=~s/o{3}|o{5}/ooos/g ^^^^^^^^^ L'ordre des termes de l'alternative définit une priorité (le premier qui matche est utilisé, quelle que soit sa longueur)
Si j'ai répondu à côté de la plaque, précise ton problème, avec un exemple plus explicite.
-- Jérémy JUST
nospamthanx
wrote:
Bonjour
J'ai écris ce petit programme afin de remplacer des chaînes qui se partagent les mêmes caractères comme ooo et oooo. Comment rendre la RE strict de façon a ce que ce petit programme me donne ooos en vertu de l'application de la premiere règle seulement.
La question n'est pas très explicite... Tu veux faire quoi au juste ? Que 'ooo' devienne 'ooos' seulement si 'ooo' n'est pas suivi d'un autre 'o' ???
Dans ce cas, penser au test avant négatif, "(?! )", illustré ci-dessous: $a =~ s/ooo(?!o)/ooos/g;
Attention aux effets de bord, si $a='oooo', la subsitution donnera 'oooos' puisque les 3 derniers 'o' répondent au motif. Ainsi, si tu veux remplacer 'ooo' par 'ooos' à condition qu'il n'y ait que trois 'o' qui soient répétés (c'est peut-être ce que tu appelles "rendre la RE stricte" ?) alors il faut ajouter un test arrière négatif: $a =~ s/(?<!o)ooo(?!o)/ooos/g;
Note au passage que cette expression s'exécutera plus rapidement que $a =~ s/(?<!o)o{3}(?!o)/ooos/g; qu'il vaut mieux éviter dans ce cas.
<fred78980@yahoo.com> wrote:
Bonjour
J'ai écris ce petit programme afin de remplacer des chaînes qui se
partagent les mêmes caractères comme ooo et oooo. Comment rendre la
RE strict de façon a ce que ce petit programme me donne ooos en vertu
de l'application de la premiere règle seulement.
La question n'est pas très explicite...
Tu veux faire quoi au juste ? Que 'ooo' devienne 'ooos' seulement si
'ooo' n'est pas suivi d'un autre 'o' ???
Dans ce cas, penser au test avant négatif, "(?! )", illustré ci-dessous:
$a =~ s/ooo(?!o)/ooos/g;
Attention aux effets de bord, si $a='oooo', la subsitution donnera
'oooos' puisque les 3 derniers 'o' répondent au motif.
Ainsi, si tu veux remplacer 'ooo' par 'ooos' à condition qu'il n'y ait
que trois 'o' qui soient répétés (c'est peut-être ce que tu appelles
"rendre la RE stricte" ?) alors il faut ajouter un test arrière négatif:
$a =~ s/(?<!o)ooo(?!o)/ooos/g;
Note au passage que cette expression s'exécutera plus rapidement que
$a =~ s/(?<!o)o{3}(?!o)/ooos/g;
qu'il vaut mieux éviter dans ce cas.
J'ai écris ce petit programme afin de remplacer des chaînes qui se partagent les mêmes caractères comme ooo et oooo. Comment rendre la RE strict de façon a ce que ce petit programme me donne ooos en vertu de l'application de la premiere règle seulement.
La question n'est pas très explicite... Tu veux faire quoi au juste ? Que 'ooo' devienne 'ooos' seulement si 'ooo' n'est pas suivi d'un autre 'o' ???
Dans ce cas, penser au test avant négatif, "(?! )", illustré ci-dessous: $a =~ s/ooo(?!o)/ooos/g;
Attention aux effets de bord, si $a='oooo', la subsitution donnera 'oooos' puisque les 3 derniers 'o' répondent au motif. Ainsi, si tu veux remplacer 'ooo' par 'ooos' à condition qu'il n'y ait que trois 'o' qui soient répétés (c'est peut-être ce que tu appelles "rendre la RE stricte" ?) alors il faut ajouter un test arrière négatif: $a =~ s/(?<!o)ooo(?!o)/ooos/g;
Note au passage que cette expression s'exécutera plus rapidement que $a =~ s/(?<!o)o{3}(?!o)/ooos/g; qu'il vaut mieux éviter dans ce cas.
Paul Gaborit
À (at) Thu, 5 May 2005 13:03:11 +0200, Jérémy JUST écrivait (wrote):
Sinon, quelque chose comme ça:
$b=~s/o{3}|o{5}/ooos/g ^^^^^^^^^ L'ordre des termes de l'alternative définit une priorité (le premier qui matche est utilisé, quelle que soit sa longueur)
Et dans ce cas particulier, l'application de la règle sus-citée rend la deuxième partie de l'alternative totalement inutile. C'est donc équivalent à :
$b =~ s/o{3}/ooos/g;
Pour le reste, attendons que le PO précise sa question...
-- Paul Gaborit - <http://perso.enstimac.fr/~gaborit/> Perl en français - <http://perl.enstimac.fr/>
À (at) Thu, 5 May 2005 13:03:11 +0200,
Jérémy JUST <jeremy_just@netcourrier.com> écrivait (wrote):
Sinon, quelque chose comme ça:
$b=~s/o{3}|o{5}/ooos/g
^^^^^^^^^
L'ordre des termes de l'alternative définit une priorité
(le premier qui matche est utilisé, quelle que soit sa longueur)
Et dans ce cas particulier, l'application de la règle sus-citée rend la
deuxième partie de l'alternative totalement inutile. C'est donc équivalent
à :
$b =~ s/o{3}/ooos/g;
Pour le reste, attendons que le PO précise sa question...
--
Paul Gaborit - <http://perso.enstimac.fr/~gaborit/>
Perl en français - <http://perl.enstimac.fr/>
À (at) Thu, 5 May 2005 13:03:11 +0200, Jérémy JUST écrivait (wrote):
Sinon, quelque chose comme ça:
$b=~s/o{3}|o{5}/ooos/g ^^^^^^^^^ L'ordre des termes de l'alternative définit une priorité (le premier qui matche est utilisé, quelle que soit sa longueur)
Et dans ce cas particulier, l'application de la règle sus-citée rend la deuxième partie de l'alternative totalement inutile. C'est donc équivalent à :
$b =~ s/o{3}/ooos/g;
Pour le reste, attendons que le PO précise sa question...
-- Paul Gaborit - <http://perso.enstimac.fr/~gaborit/> Perl en français - <http://perl.enstimac.fr/>
Jérémy JUST
On Mon, 09 May 2005 12:07:43 +0200 Paul Gaborit wrote:
Et dans ce cas particulier, l'application de la règle sus-citée rend la deuxième partie de l'alternative totalement inutile.
Oups, oui. Dans mon écriture avec « or » aussi, d'ailleurs. J'ai dû me laisser trop influencer par l'exemple du PO.
Merci pour la rectification.
-- Jérémy JUST
On Mon, 09 May 2005 12:07:43 +0200
Paul Gaborit <Paul.Gaborit@invalid.invalid> wrote:
Et dans ce cas particulier, l'application de la règle sus-citée rend
la deuxième partie de l'alternative totalement inutile.
Oups, oui. Dans mon écriture avec « or » aussi, d'ailleurs.
J'ai dû me laisser trop influencer par l'exemple du PO.