OVH Cloud OVH Cloud

motifs et remplacement

3 réponses
Avatar
Paul Bert
Bonsoir,

Je parse un fichier, et j'aimerais faire qq opérations sur les lignes.
En particulier, je recherche certains motifs

open(FILE, "< $file") or die "Cannot open $file: $!";
while (my $line = <FILE>)
{
chomp $line;

if ($line =~ m/aaa([\w]+)aaa/g)
{
$line =~ s|($1)|[$1]|g;
etc ...
}
}
close FILE;


Voici mes questions :

- le motif que je recherche peut apparaître plusieurs fois sur une
même ligne : comment "mémoriser" (dans les $1, et suivants) toutes
les occurrences ? car j'en ai besoin pour la suite.

- comment faire pour que toutes ces occurrences subissent la même
transformation (avec le s//) ?

En espérant avoir été suffisament clair.
Merci de votre aide,

P. Bert

3 réponses

Avatar
Rue des Prairies
Paul Bert wrote:
Bonsoir,

Je parse un fichier, et j'aimerais faire qq opérations sur les lignes.
En particulier, je recherche certains motifs

open(FILE, "< $file") or die "Cannot open $file: $!";
while (my $line = <FILE>)
{
chomp $line;

if ($line =~ m/aaa([w]+)aaa/g)
{
$line =~ s|($1)|[$1]|g;
etc ...
}
}
close FILE;


Voici mes questions :

- le motif que je recherche peut apparaître plusieurs fois sur une
même ligne : comment "mémoriser" (dans les $1, et suivants) toutes
les occurrences ? car j'en ai besoin pour la suite.

- comment faire pour que toutes ces occurrences subissent la même
transformation (avec le s//) ?

En espérant avoir été suffisament clair.
Merci de votre aide,

P. Bert

Bonjour,

Je ne comprend pas bien ce que tu veux dire par mémoriser toutes les
occurrences, si c'est simplement les compter, tu peux faire :

while ($ligne =~ s/aaa([w]+)aaa/[$1]/) {
$cpt++;
}

d'autre part, je pressent une erreur dans l'expression, [w] signifie :
le caractère ou le caractère w, est-ce bien ce que tu cherches ?

Olivier.

Avatar
Paul Bert
In article <bonhud$crn$, Rue des Prairies wrote:
Paul Bert wrote:
Bonsoir,

Je parse un fichier, et j'aimerais faire qq opérations sur les lignes.
En particulier, je recherche certains motifs

open(FILE, "< $file") or die "Cannot open $file: $!";
while (my $line = <FILE>)
{
chomp $line;

if ($line =~ m/aaa([w]+)aaa/g)
{
$line =~ s|($1)|[$1]|g;
etc ...
}
}
close FILE;


Voici mes questions :

- le motif que je recherche peut apparaître plusieurs fois sur une
même ligne : comment "mémoriser" (dans les $1, et suivants) toutes
les occurrences ? car j'en ai besoin pour la suite.

- comment faire pour que toutes ces occurrences subissent la même
transformation (avec le s//) ?

En espérant avoir été suffisament clair.
Merci de votre aide,

P. Bert

Bonjour,

Je ne comprend pas bien ce que tu veux dire par mémoriser toutes les
occurrences, si c'est simplement les compter, tu peux faire :

while ($ligne =~ s/aaa([w]+)aaa/[$1]/) {
$cpt++;
}


Non, pas les compter. Je souhaite ensuite faire 2 choses :
- les stocker dans un tableau
- modifier $line pour ajouter des balises autour de ces motifs.
Typiquement, ce sera du html, et je veux donc mettre des <b></b>
autour.

d'autre part, je pressent une erreur dans l'expression, [w] signifie :
le caractère ou le caractère w, est-ce bien ce que tu cherches ?



Euh effectivment pas. Je croyais que w correspondait aux caractères
alphanumériques et au _, je me trompe ?

Merci.

Paul


Avatar
Rue des Prairies
Paul Bert wrote:
In article <bonhud$crn$, Rue des Prairies wrote:

Paul Bert wrote:

Bonsoir,

Je parse un fichier, et j'aimerais faire qq opérations sur les lignes.
En particulier, je recherche certains motifs

open(FILE, "< $file") or die "Cannot open $file: $!";
while (my $line = <FILE>)
{
chomp $line;

if ($line =~ m/aaa([w]+)aaa/g)
{
$line =~ s|($1)|[$1]|g;
etc ...
}
}
close FILE;


Voici mes questions :

- le motif que je recherche peut apparaître plusieurs fois sur une
même ligne : comment "mémoriser" (dans les $1, et suivants) toutes
les occurrences ? car j'en ai besoin pour la suite.

- comment faire pour que toutes ces occurrences subissent la même
transformation (avec le s//) ?

En espérant avoir été suffisament clair.
Merci de votre aide,

P. Bert



Bonjour,
Je ne comprend pas bien ce que tu veux dire par mémoriser toutes les
occurrences, si c'est simplement les compter, tu peux faire :

while ($ligne =~ s/aaa([w]+)aaa/[$1]/) {
$cpt++;
}



Non, pas les compter. Je souhaite ensuite faire 2 choses :
- les stocker dans un tableau
- modifier $line pour ajouter des balises autour de ces motifs.
Typiquement, ce sera du html, et je veux donc mettre des <b></b>
autour.

d'autre part, je pressent une erreur dans l'expression, [w] signifie :
le caractère ou le caractère w, est-ce bien ce que tu cherches ?




Euh effectivment pas. Je croyais que w correspondait aux caractères
alphanumériques et au _, je me trompe ?

Merci.

Paul



while ($ligne =~ s|aaa(w+)aaa|<b>$1</b>|) {
push @tab, $1;
}
Tu retrouves dans le tableau @tab la liste des chaînes substituées.

w, sans les crochets, représente n'importe quel caractère alphanum
mais, si tu l'entoure de crochets , cela signifie que tu veux l'un ou
l'autre des caractères contenu dans les crochets.


Olivier.