Voici mon probleme, je souhaite éxtraire ( c'est dans une page html mais
ca a pas d'importance je crois ) , dans un texte de ce genre :
machin:18bed<br>
bidule:1e42<br>
chose:0..<br>
uniquement les nombres qui se trouvent apres le ":"
ces nombres ont une longueur variable, ils peuvent etre suivis de
lettres, puis de chiffres, mais je ne veux que le premier nombre ( ici :
18, 1, 0 ) ...
Une idée ?
Merci d'avance.
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 Wed, 19 Jan 2005 00:33:45 +0100 "arthur.wolf" wrote:
machin:18bed<br> bidule:1e42<br> chose:0..<br>
uniquement les nombres qui se trouvent apres le ":" ces nombres ont une longueur variable, ils peuvent etre suivis de lettres, puis de chiffres, mais je ne veux que le premier nombre
Pour récupérer les nombres qui suivent le signe deux-points, il suffit d'utiliser cette regexp: /:(d+)/ Quand la regexp a matché, le nombre est dans $1.
Ensuite, il faudrait préciser un peu le contexte si tu veux une réponse plus adaptée. Ce motif peut-il apparaître plusieurs fois dans la ligne? Veux-tu récupérer uniquement ce motif quand il est suivi de <br>?...
-- Jérémy JUST
On Wed, 19 Jan 2005 00:33:45 +0100
"arthur.wolf" <arthur.wolf@free.fr> wrote:
machin:18bed<br>
bidule:1e42<br>
chose:0..<br>
uniquement les nombres qui se trouvent apres le ":"
ces nombres ont une longueur variable, ils peuvent etre suivis de
lettres, puis de chiffres, mais je ne veux que le premier nombre
Pour récupérer les nombres qui suivent le signe deux-points, il suffit
d'utiliser cette regexp: /:(d+)/
Quand la regexp a matché, le nombre est dans $1.
Ensuite, il faudrait préciser un peu le contexte si tu veux une
réponse plus adaptée. Ce motif peut-il apparaître plusieurs fois dans la
ligne? Veux-tu récupérer uniquement ce motif quand il est suivi de
<br>?...
On Wed, 19 Jan 2005 00:33:45 +0100 "arthur.wolf" wrote:
machin:18bed<br> bidule:1e42<br> chose:0..<br>
uniquement les nombres qui se trouvent apres le ":" ces nombres ont une longueur variable, ils peuvent etre suivis de lettres, puis de chiffres, mais je ne veux que le premier nombre
Pour récupérer les nombres qui suivent le signe deux-points, il suffit d'utiliser cette regexp: /:(d+)/ Quand la regexp a matché, le nombre est dans $1.
Ensuite, il faudrait préciser un peu le contexte si tu veux une réponse plus adaptée. Ce motif peut-il apparaître plusieurs fois dans la ligne? Veux-tu récupérer uniquement ce motif quand il est suivi de <br>?...
-- Jérémy JUST
Alain Star
Inserb wrote:
:: my $var=(/:(d+)/, $&);
Aurais-tu la gentillesse d'expliquer ce que fait précisement cette ligne s'il te plait?
Merci,
AS
Inserb wrote:
:: my $var=(/:(d+)/, $&);
Aurais-tu la gentillesse d'expliquer ce que fait précisement cette ligne
s'il te plait?
Aurais-tu la gentillesse d'expliquer ce que fait précisement cette ligne s'il te plait?
Merci,
AS
Inserb
Alain Star wrote:
Inserb wrote:
my $var=(/:(d+)/, $&);
Aurais-tu la gentillesse d'expliquer ce que fait précisement cette ligne s'il te plait?
Vi.
Je me permet de passer sur my $var - /:(d+)/ => regexp qui cherche un occurance qui commence par ':' puis qui contient au moins 1 chiffre dernière mais qui peut en contenir n Dans la regexp, 'd' correspond à un chiffre de '0' à '9', et le + signifie au moins une fois, et jusqu'à n fois. (* => 0 à n et ? => 0 ou 1 fois).
- $& => correspond au résultat qui dans ce cas va être stocké dans $var.
Donc si on reprend l'exemple initial et en essayant de le traduire pas à pas, on a plus ou moins :
machin:18bed<br>
=> recherche d'un occurance qui commence par ':' donc ":18bed<br>"
puis on recherche 1 à n nombres derrière les 2 points en s'arrêtant au 1er caractère qui n'en sont pas : =>1 puis 8 et on s'arrête au b
Au final on a donc $var = ':18'
Voilà, ça doit être ça. En espèrant pas avoir fait d'erreur en développant trop et avoir été clair...
Alain Star wrote:
Inserb wrote:
my $var=(/:(d+)/, $&);
Aurais-tu la gentillesse d'expliquer ce que fait précisement cette
ligne s'il te plait?
Vi.
Je me permet de passer sur my $var
- /:(d+)/ => regexp qui cherche un occurance qui commence par ':'
puis qui contient au moins 1 chiffre dernière mais qui peut en contenir
n
Dans la regexp, 'd' correspond à un chiffre de '0' à '9', et le +
signifie
au moins une fois, et jusqu'à n fois. (* => 0 à n et ? => 0 ou 1 fois).
- $& => correspond au résultat qui dans ce cas va être stocké dans $var.
Donc si on reprend l'exemple initial et en essayant de le traduire pas à
pas,
on a plus ou moins :
machin:18bed<br>
=> recherche d'un occurance qui commence par ':' donc
":18bed<br>"
puis on recherche 1 à n nombres derrière les 2 points en s'arrêtant
au 1er caractère qui n'en sont pas :
=>1 puis 8 et on s'arrête au b
Au final on a donc $var = ':18'
Voilà, ça doit être ça. En espèrant pas avoir fait d'erreur en
développant
trop et avoir été clair...
Aurais-tu la gentillesse d'expliquer ce que fait précisement cette ligne s'il te plait?
Vi.
Je me permet de passer sur my $var - /:(d+)/ => regexp qui cherche un occurance qui commence par ':' puis qui contient au moins 1 chiffre dernière mais qui peut en contenir n Dans la regexp, 'd' correspond à un chiffre de '0' à '9', et le + signifie au moins une fois, et jusqu'à n fois. (* => 0 à n et ? => 0 ou 1 fois).
- $& => correspond au résultat qui dans ce cas va être stocké dans $var.
Donc si on reprend l'exemple initial et en essayant de le traduire pas à pas, on a plus ou moins :
machin:18bed<br>
=> recherche d'un occurance qui commence par ':' donc ":18bed<br>"
puis on recherche 1 à n nombres derrière les 2 points en s'arrêtant au 1er caractère qui n'en sont pas : =>1 puis 8 et on s'arrête au b
Au final on a donc $var = ':18'
Voilà, ça doit être ça. En espèrant pas avoir fait d'erreur en développant trop et avoir été clair...
Jérémy JUST
On Wed, 19 Jan 2005 09:54:52 +0100 "Inserb" wrote:
my $var=(/:(d+)/, $&); $var=~ s/://g;
C'est du gâchis d'utiliser des parenthèses, puis de retraiter ce qui est dans $&. En plus de consommer plus de CPU et de mémoire, ça rend la compréhension délicate.
J'aurais vu un simple (je laisse l'enrobage avec le open() en exercice au lecteur):
while(<MON_FICHIER>) {if (/:(d+)/) {print $1, "n" ; } }
On Wed, 19 Jan 2005 09:54:52 +0100
"Inserb" <seb@invalid.com> wrote:
my $var=(/:(d+)/, $&);
$var=~ s/://g;
C'est du gâchis d'utiliser des parenthèses, puis de retraiter ce qui
est dans $&. En plus de consommer plus de CPU et de mémoire, ça rend la
compréhension délicate.
J'aurais vu un simple (je laisse l'enrobage avec le open() en exercice
au lecteur):
while(<MON_FICHIER>)
{if (/:(d+)/)
{print $1, "n" ;
}
}
On Wed, 19 Jan 2005 09:54:52 +0100 "Inserb" wrote:
my $var=(/:(d+)/, $&); $var=~ s/://g;
C'est du gâchis d'utiliser des parenthèses, puis de retraiter ce qui est dans $&. En plus de consommer plus de CPU et de mémoire, ça rend la compréhension délicate.
J'aurais vu un simple (je laisse l'enrobage avec le open() en exercice au lecteur):
while(<MON_FICHIER>) {if (/:(d+)/) {print $1, "n" ; } }
Je vais peut etre passer pour un imbécile, mais ... /:(d+)/ , j'en fait quoi ... je veux dire, comment je me sers de ca pour obtenir ma liste de nombres ?
En parcourant ta page, tu fais : my $var=(/:(d+)/, $&); $var=~ s/://g;
et la $var correspond (dans ton exemple) à 18 puis 1 puis 0, etc....
En fait, je ne parcours pas un fichier, mais une chaine qui contient la page ( $page ), ou je mets $page dans tout ca ? ( merci de m'aider :) )
Inserb wrote:
arthur.wolf wrote:
Je vais peut etre passer pour un imbécile, mais ... /:(d+)/ , j'en
fait quoi ... je veux dire, comment je me sers de ca pour obtenir ma
liste de nombres ?
En parcourant ta page, tu fais :
my $var=(/:(d+)/, $&);
$var=~ s/://g;
et la $var correspond (dans ton exemple) à 18 puis 1 puis 0, etc....
En fait, je ne parcours pas un fichier, mais une chaine qui contient la
page ( $page ), ou je mets $page dans tout ca ? ( merci de m'aider :) )
Je vais peut etre passer pour un imbécile, mais ... /:(d+)/ , j'en fait quoi ... je veux dire, comment je me sers de ca pour obtenir ma liste de nombres ?
En parcourant ta page, tu fais : my $var=(/:(d+)/, $&); $var=~ s/://g;
et la $var correspond (dans ton exemple) à 18 puis 1 puis 0, etc....
En fait, je ne parcours pas un fichier, mais une chaine qui contient la page ( $page ), ou je mets $page dans tout ca ? ( merci de m'aider :) )
Inserb
arthur.wolf wrote:
En fait, je ne parcours pas un fichier, mais une chaine qui contient la page ( $page ), ou je mets $page dans tout ca ? ( merci de m'aider :) )
Il existe probablement des solutions plus optimisées, mais tu peux toujours créer un tableau à partir de ta variable et traiter chaque "case" de ton tableau.
Genre:
my @tableau_page = split (/n/, $page); foreach(@tableau_page) { if (/:(d+)/) { print $1, "n"; } }
Bon, reste à voir si c'est ce qu'il y a de mieux, mais ça marche.
arthur.wolf wrote:
En fait, je ne parcours pas un fichier, mais une chaine qui contient
la page ( $page ), ou je mets $page dans tout ca ? ( merci de m'aider
:) )
Il existe probablement des solutions plus optimisées, mais tu peux
toujours créer un tableau à partir de ta variable et traiter chaque
"case" de ton tableau.
Genre:
my @tableau_page = split (/n/, $page);
foreach(@tableau_page)
{
if (/:(d+)/)
{
print $1, "n";
}
}
Bon, reste à voir si c'est ce qu'il y a de mieux, mais ça marche.
En fait, je ne parcours pas un fichier, mais une chaine qui contient la page ( $page ), ou je mets $page dans tout ca ? ( merci de m'aider :) )
Il existe probablement des solutions plus optimisées, mais tu peux toujours créer un tableau à partir de ta variable et traiter chaque "case" de ton tableau.
Genre:
my @tableau_page = split (/n/, $page); foreach(@tableau_page) { if (/:(d+)/) { print $1, "n"; } }
Bon, reste à voir si c'est ce qu'il y a de mieux, mais ça marche.