Accueil > Forum > > > > ereg ?
ereg ?
lundi 1 mars 2010 à 14:20:00 |
ereg ?

yuccaV2
|
Bonjour je souhaite extraire le contenu altText dans une balise image, j'imagine avec ereg.
<img class="hasTip" src="repertoire/nomImage.jpg" alt ="altText" title="titreText" />
-> je cherche a obtenir une variable contenant "altText" (enfin, sans les guillemets).
J'ai cherché à le faire avec les eregs, mais vraiment j'y comprend rien.
Si quelqu'un peut me donner la formule... Et une ou deux explications.
merci d'avance.
yuccaV2
|
|
lundi 1 mars 2010 à 19:03:44 |
Re : ereg ?

TychoBrahe
|
Salut,
Un petite citation du manuel PHP concernant toutes les fonctions de la famille de ereg :
Cette fonction est OBSOLETE depuis PHP 5.3.0 et a été SUPPRIMEE depuis PHP 6.0.0. Nous vous encourageons vivement à ne plus l'utiliser.
Bref, commence donc plutôt à utiliser preg_match(). Si besoin tu trouvera des cours sur expreg.com.
|
|
lundi 1 mars 2010 à 20:35:49 |
Re : ereg ?

gibozsec
|
Bonjour,
L'expression régulière n'est pas excessivement compliquée à partir du moment ou tu veux n'extraire que le contenu de l'attribut alt.
Pour faire simple, exprime d'abord ce que tu veux en français :
-> tous les caractères qui sont entre les guillemets qui suivent la chaine alt =
En expression régulière ça donne :
->qui suivent la chaine alt = => $regexp = 'alt =';
-> entre les guillements qui suivent alt = => $regexp = 'alt =""';
-> n'importe quel caractère entre ces guillemets => $regexp = 'alt ="(.+?)"';
Petites précisions sur la partie dynamique de l'expression :
->Le point (.) signifie n'importe quel caractère.
-> Le + signifie de 1 à n répétitions. Donc .+ signifie de 1 à n fois n'importe quel caractère
-> Le ? rend la recherche "fainéante". C'est à dire qu'elle va s'arrêter dès qu'elle aura trouver le plus petit bout de chaîne qui correspond. Avec .+? tout seul ça signifierait 1 seul caractère, mais comme après il y a un guillemet, la recherche prendra tous les caractères qu'elle trouvera jusqu'à trouver un guillemet. Sans le ?, la recherche pourrait continuer jusqu'au guillemet fermant de l'attribut title.
-> Les parenthèses permettent d'indiquer la partie que l'on veut extraire pour la réutiliser (en gros).
Maintenant que tu as la regexp, il ne te reste plus qu'à utiliser ta fonction (preg_match pour faire plaisir au monsieur ci-dessus ;) )
<?php
$matches = array();
$regexp = '/alt ="(.+?)"/';
//Les slashs au debut et à la fin sont des délimiteurs, tu peux utiliser n'importe quel caractère à condition que ce soit le même au début et à la fin et qu'il ne soit pas utiliser dans l'expression elle même
preg_match($code_html, $regexp, $matches);
//Si ca match, le tableau $matches contiendra la chaîne matchée par l'expression complète en 0 et ce qui est entre les parenthèses en 1)
?>
Attention, je n'ai pas pris en compte les possibles espaces blancs avant ou après le = mais je suis sur que tu sauras ajouter ça toi même. Petit indice, un caractère blanc s'exprime par \s dans une regexp (le backslash est volontaire, c'est pas une faute de frappe).
Bon courage à toi.
Grrrrrrrrrrr
|
|
mardi 2 mars 2010 à 11:26:38 |
Re : ereg ?

yuccaV2
|
Alors là je dis merci pour le temps consacré, bravo pour l'aspect didactique, et chapeau bas. C'est plus pédagogique et plus clair que tout ce que j'ai pu trouver sur le sujet. Je garde cette réponse précieusement car elle m'indique enfin ce que signifie les "?", les ".+" et tout le reste.
Bon maintenant... Ça ne fonctionne pas mais ça ne doit pas être grand chose.
Voici mon bout de code :
<?php
$code_html='<img class="hasTip" src="images/m_mardiscj2120630_manif.jpg" alt ="altText" title="Legend::titreText" />';
$matches = array();
$regexp = '/alt \s="(.+?)"/';
preg_match($code_html, $regexp, $matches);
echo $matches[0];
echo $matches[1];
?>
Donne aucun retour. J'ai essayé aussi sans le \s (et encore merci pour la signification).
yuccaV2
|
|
mardi 2 mars 2010 à 12:35:12 |
Re : ereg ?

TychoBrahe
|
Salut,
Le ? rend la recherche "fainéante". C'est à dire qu'elle va s'arrêter dès qu'elle aura trouver le plus petit bout de chaîne qui correspond. Avec .+? tout seul ça signifierait 1 seul caractère, mais comme après il y a un guillemet, la recherche prendra tous les caractères qu'elle trouvera jusqu'à trouver un guillemet. Sans le ?, la recherche pourrait continuer jusqu'au guillemet fermant de l'attribut title.
Ou bien utiliser l'option U (U pour ungreedy) qui permet d'appliquer cette règle sur toute la regexp et non juste sur la zone. Précision importante, le point d'interogation à également un sens tout autre : signifier 0 ou 1 occurrence de la classe précédente (exemple : \s? signifie 0 ou 1 espace blanc).
Au passage, le résultat cherché est dans $matches[1] qui est un tableau, utilises plutôt var_dump() ou print_r() pour regarder ce qui s'y trouve au lieux d'un echo.
Maintenant que tu as la regexp, il ne te reste plus qu'à utiliser ta fonction (preg_match pour faire plaisir au monsieur ci-dessus ;) )
Je me suis mal exprimé, par preg_match j'entendai l'utilisation des fonctions de la famille de preg_match, par exemple s'il est possible que plusieurs attributs alt soit présents (plusieurs images), alors c'est preg_match_all() qu'il faut utiliser. Pour reprendre le code ci-dessu :
Code PHP :
<?php
$code_html='<img class="hasTip" src="images/m_mardiscj2120630_manif.jpg" alt ="altText" title="Legend::titreText" />';
$matches = array();
$regexp = '/alt\s*=\s*"(.+)"/U';
preg_match($code_html, $regexp, $matches);
var_dump($matches[1]);
?>
Vu que $matches[1] est un tableau contenant toutes les occurrences, on obtient ceci :
array(1) {
[0]=>
string(7) "altText"
}
|
|
mardi 2 mars 2010 à 13:23:49 |
Re : ereg ?

yuccaV2
|
J'apprends décidément pleins de trucs utiles... Merci à tous.
Par contre, moi j'obtiens "NULL" avec le code :
Code PHP : <?php
$code_html='<img class="hasTip" src="images/m_mardiscj2120630_manif.jpg" alt ="altText" title="Legend::titreText" />';
$matches = array();
$regexp = '/alt\s*=\s*"(.+)"/U';
preg_match($code_html, $regexp, $matches);
var_dump($matches[1]);
?>
Il y a rien dans ce tableau, non ?
yuccaV2
|
|
mardi 2 mars 2010 à 17:52:55 |
Re : ereg ?

TychoBrahe
|
Désolé, j'ai inversé $code_html et $regexp par erreur.
preg_match($regexp, $code_html, $matches);
Sinon, c'est toujours bon de tester la valeur de retour de preg_match. Vu que cette fonction renvoie le nombre de fois où ça a matché on peu éviter de faire plein de trucs inutiles quand le motif n'a jamais été trouvé (retour 0) ou en cas d'erreur (retour NULL).
|
|
mardi 2 mars 2010 à 19:04:48 |
Re : ereg ?

kohntark
|
Salut,
Juste une broutille en passant :
Je ne suis pas certain que des espaces avant ou/et après le = soient valides. Question "bonnes pratiques" surement pas.
Par contre il ma parait nécessaire d'en mettre un avant le alt (dans la regex) afin de limiter la possibilité (par ex) d'une fin en 'alt=' dans la src.
Il faudrait aussi prendre en compte que l'attribut alt n'est pas propre à la balise img et qu'il peut apparaitre ailleurs dans le code.
Cordialement,
Kohntark -
|
|
mardi 2 mars 2010 à 20:22:09 |
Re : ereg ?

gibozsec
|
Je prend note du flag U, je connaissais pas, merci pour l'info.
Au passage, pour yuccaV2, tu peux trouver des logiciels qui te permettent de tester tes regexp facilement (genre regexp builder).
Pour ce qui est des bases des expressions régulières (genre le +, le * ou le .) tu peux facilement trouver un tutorial sur le net. Allez au hasard : http://www.siteduzero.com/tutoriel-3-14663-memo-pour-les-regex.html
Bon amusement.
Grrrrrrrrrrr
|
|
mercredi 3 mars 2010 à 09:04:28 |
Re : ereg ?

yuccaV2
|
Top merci à tous.
Ça marche nickel.
|
|
Cette discussion est classée dans : ereg, alttext
Répondre à ce message
Sujets en rapport avec ce message
ereg_replace [ par bebeArnaud ]
je cherche à remplacer plusieurs mots par des balises ( input type=texte );mais je me heurte à un problème : la fonction ereg_replace utilisée plusieu
ereg() en javascript [ par eax ]
salut je cherche une fonction en javascript qui fonctionne comme la ereg() en php.mais je connais rien en javascript alors si qqun connait un bon tuto
forme ereg, eregi, ereg_replace, eregi_replace [ par apz ]
salut,j'aimerais bien comprendre les expressions regulieres (ereg, ereg_replace, eregi, eregi_replace).j'ai lu la documentation et voila ce que j'ai c
remplacer strok par ereg [ par apz ]
salut,j'utilise strok pour recuperer des sous-chaines d'une ligne dans un fichier.mais je voulais remplacer le strok (pour eviter les boucles et ainsi
petite question ereg [ par eax ]
salut en fait cette question s'adresse à TortueGeniale mais je la pose ici pour etre sur d'avoir une reponsec au sujet du script upload sur free, y'a
Mini Pb avec ereg_replace() [ par nicolas66 ]
<a href="Bonjour @ tous les programmeurs : br Toujours pr mon forum, jessaye de mettre en place des boutons js qui font saisir à l utilisateur url et
Prob ereg [ par jonguerre ]
Salut a tous j ai un ptit probleme avec les expressions regulieres alors voila :j ai un fichier txt qui contient :</MOD_
problème ereg et + [ par RockmanX ]
voici ce que je veux faire:je veux remplacer le signe "+" par "%2B"je fais =>ereg_replace("+", "%2B", $nom)mais sa me met un message d'erreur!ou est l
Probleme d'upload [ par morgandetoi06 ]
bonjour,voila sur mon site j ai fait une page où les visiteurs peuvent uploader une photo perso, et elle sera affichée sur cette meme page.le principe
à l'aide svp probleme d'upload [ par morgandetoi06 ]
svp aidez moi j ai deja posté ce message sur le forum mais n ayant pas eu de reponse je le repostebonjour,voila sur mon site j ai fait une page où les
Livres en rapport
|
Derniers Blogs
IMAGINE CUP 2012, MAKE A SIGN EN FINALEIMAGINE CUP 2012, MAKE A SIGN EN FINALE par junarnoalg
Voilà qui est fait, la nouvelle est officielle ! L'équipe belge "Make a Sign" va au pays des kangourous défendre son projet dans la catégorie Software Design. http://www.imaginecup.com/CompetitionsContent/Competition/WorldwideFinalists.aspx V...
Cliquez pour lire la suite de l'article par junarnoalg KINECT 1.5 IS OUT !KINECT 1.5 IS OUT ! par Vko
La version 1.5 du Kinect For Microsoft vient tout juste de sortir ! Plein de nouveautés: Tracking de squelette en Near Mode Détection en position assise Détection faciale avec un SDK dédié Documentation et des guideline (enfin) Un out...
Cliquez pour lire la suite de l'article par Vko LES ACTUALITéS DE LA SEMAINE SUR C2I.FR (14 MAI - 20 MAI) LES ACTUALITéS DE LA SEMAINE SUR C2I.FR (14 MAI - 20 MAI) par richardc
Mise à jour des Web API du 14 Mai
Réservez dès maintenant votre journée du 20 juin pour le Windows Azure Dev Camp 2012 à Paris
Mise à jour de Team Foundation Service
MechCommander 2 sur Windows 8
Entity Framework 5 Release Candidate e...
Cliquez pour lire la suite de l'article par richardc REACTIVE EXTENSIONS : CONSOMMER DES SERVICES AVEC RX PARTIE 3, LES PIèGES à éVITERREACTIVE EXTENSIONS : CONSOMMER DES SERVICES AVEC RX PARTIE 3, LES PIèGES à éVITER par Groc
Une mauvaise utilisation de rx lors de l'écriture d'une couche d'accès à des services peut conduire à des cas embarassants avec des erreurs mal gérées, des appels qui ne partent lorsqu'ils le devraient, et même des résultats incorrects . le tout nuis...
Cliquez pour lire la suite de l'article par Groc SHAREPOINT BLOG SITE, PROBLèME D'ARCHIVESSHAREPOINT BLOG SITE, PROBLèME D'ARCHIVES par junarnoalg
Dernièrement, nous avons migré le site
myTIC
vers un nouveau serveur SharePoint 2010. Dans les contenus que nous vouloins récupérer, nous avions un certain nombre de blogs.
Nous avons utilisé les commandes Power...
Cliquez pour lire la suite de l'article par junarnoalg
Forum
XML ET PHPXML ET PHP par karouani
Cliquez pour lire la suite par karouani
Logiciels
sDEVIS-FACTURES vlPRO (8.1.0.3)SDEVIS-FACTURES VLPRO (8.1.0.3)sDEVIS-FACTURES vlPRO a été mis au point pour les particuliers, créateurs, entrepreneurs, artisa... Cliquez pour télécharger sDEVIS-FACTURES vlPRO 974 Application Server (12.2.4.6)974 APPLICATION SERVER (12.2.4.6)Développez de puissantes applications dans un environnement de 'cloud computing', clusterisé, séc... Cliquez pour télécharger 974 Application Server vPicture (1.4.2.1)VPICTURE (1.4.2.1)Avec vPicture, hébergez vos images facilement et rapidement.
vPicture est un utilitaire simple, ... Cliquez pour télécharger vPicture Easy-Planning (2.2.1.6)EASY-PLANNING (2.2.1.6)Easy-Planning permet de créer des plannings sous la représentation de diagrammes et est adapté au... Cliquez pour télécharger Easy-Planning COM-BACKUP (2.0)COM-BACKUP (2.0)
COM-BACKUP est un logiciel de sauvegarde qui permet de planifier les sauvegardes de vos dossiers ...
Cliquez pour télécharger COM-BACKUP
|