Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Extraire Eléments via regex

7 réponses
Avatar
BillyNoGates
Bonjour,

j'aimerais savoir comment extraire x =E9l=E9ments correspondant =E0 une
expression reguli=E8re =E0 partir d'une chaine de caract=E8re.

puis les stocker dans un tableau.

(ex: extraire tous les liens href d'un source html )

en fait je cherche quelque chose qui pourait =EAtre l'equivalent de la
fonction preg_match_all() de php, mais en perl=20

Merci d'avance

7 réponses

Avatar
Patrick Mevzek
j'aimerais savoir comment extraire x éléments correspondant à une
expression regulière à partir d'une chaine de caractère.

puis les stocker dans un tableau.

(ex: extraire tous les liens href d'un source html )


Ne pas re-inventer la roue:
HTML::LinkExtractor
URI::Find
et quelques autres...

De plus, c'est justement un mauvais exemple, on ne peut pas parser, en
toute généralité, du HTML avec une expression régulière.

en fait je cherche quelque chose qui pourait être l'equivalent de la
fonction preg_match_all() de php, mais en perl


Voir du côté de s///

--
Patrick Mevzek . . . . . . Dot and Co (Paris, France)
<http://www.dotandco.net/> <http://www.dotandco.com/>
Dépêches sur le nommage <news://news.dotandco.net/dotandco.info.news>

Avatar
BillyNoGates
Oui j'ai effectivement vu qu'il y avait des modules 'tout pret', mais
j'indiquais juste ca en tant qu'exemple, je vais avoir à extraire
d'autres éléments que des liens. c pour ca que je posais la question.
merci quand meme, je v voir du coté de s/// .
Avatar
Jacques Caron
Salut,

On Fri, 28 Oct 2005 15:45:02 +0200, BillyNoGates
wrote:

Oui j'ai effectivement vu qu'il y avait des modules 'tout pret', mais
j'indiquais juste ca en tant qu'exemple, je vais avoir à extraire
d'autres éléments que des liens.


Tant que c'est du HTML et qu'il faut extraire des attributs bien définis,
il convient d'utiliser un parser HTML et pas des expressions régulières.
Il y a beaucoup de subtilités en HTML qui font qu'une expression régulière
serait excessivement complexe pour arriver à résister à tous les cas de
figure.

Jacques.
--
Oxado http://www.oxado.com/

Avatar
Antoun
BillyNoGates wrote:
Bonjour,

j'aimerais savoir comment extraire x éléments correspondant à une
expression regulière à partir d'une chaine de caractère.

puis les stocker dans un tableau.

(ex: extraire tous les liens href d'un source html )

en fait je cherche quelque chose qui pourait être l'equivalent de la
fonction preg_match_all() de php, mais en perl

Merci d'avance



par exemple :

my @tablo = () ;
while ($texte =~ m/ta regex/g) {
push @tablo, $& ;
}

ou bien, pour éviter la pénalité de performance de $& :

my @tablo = () ;
while ($texte =~ m/(ta regex)/g) {
push @tablo, $1 ;
}

L'important est de ne pas oublier /g, sinon tu as une boucle infinie...

Avatar
BillyNoGates
merci bcp c exactement ca que je cherchais :)
Avatar
BillyNoGates
merci bcp c exactement ca que je cherchais :)
Avatar
Paul Gaborit
À (at) Sat, 29 Oct 2005 14:06:18 +0200,
Antoun écrivait (wrote):
ou bien, pour éviter la pénalité de performance de $& :

my @tablo = () ;
while ($texte =~ m/(ta regex)/g) {
push @tablo, $1 ;
}

L'important est de ne pas oublier /g, sinon tu as une boucle infinie...


Ici, l'opérateur '=~' est utilisé dans un contexte scalaire. Il
retourne donc vrai ou faux ce qui permet à 'while' de savoir si il
doit continuer ou non.

Le même opérateur utilisé dans un contexte de liste retourne tous les
groupes matchés. Une écriture simplifiée est donc :

my @tablo = $texte =~ m/(regex)/g;

La boucle est réalisée implicitement grâce au /g.

--
Paul Gaborit - <http://perso.enstimac.fr/~gaborit/>
Perl en français - <http://perl.enstimac.fr/>