begin process at 2012 05 28 22:40:30
  Trouver un code source :
 
dans
 
Accueil > Forum > 

PHP

 > 

Divers

 > 

Débutant(e)

 > 

ereg ?


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

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

Membre Club
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


Nos sponsors


Sondage...

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,671 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales