Formation Google AnalyticsSavez-vous bien utiliser les outils de mesure d'audience ?
Effectuez-vous un calcul de ROI (Retour sur investissement) pour savoir comment améliorer vos campagnes emarketing ?
Savez-vous utiliser les bons outils pour booster votre taux de transformation ?
La formation Web Analytics de Ranking Metrics, présentée par un expert reconnu officiellement par Google Analytics, vous apportera les réponses à toutes vos questions !
===> Informations et inscriptions.

soucis expression reguliere

Aller à la page 1, 2  Suivante
Poster un nouveau sujet Imprimer cette discussion    Forum -> Développement d'un site Web   Les dernières discussions de ce forum sont disponibles au format RSS
Voir le sujet précédent :: Voir le sujet suivant  
Auteur Message
 
de_prog
Nouveau WRInaute

Inscrit le: 24 Mai 2007
Messages: 28
Localisation: paris

URL permanente de ce messagePosté le : Lun Nov 19, 2007 11:26    Sujet du message: soucis expression reguliere

Bonjour,

j'utilise un expression reguliere simple pour délimiter ce qui se trouve à l'intérieur d'une div :

Code:
 $test = eregi('<div class="content">(.*)</div>',$valeur,$texte);

$valeur = $texte[0];


le problème est que cette expression me prend tout ce qui commence par <div class="content"> et se termine au dernier </div> qu'elle trouve dans le texte (donc prend d'autre contenu de div non désiré).

comment lui dire arrete toi au premier </div> que tu trouveras... ?

merci pour votre aide.
 
de_prog
Serious
WRInaute accro
WRInaute accro

Inscrit le: 21 Nov 2005
Messages: 2437

URL permanente de ce messagePosté le : Lun Nov 19, 2007 12:37    Sujet du message: soucis expression reguliere

preg_replace avec PCRE_UNGREEDY
http://fr2.php.net/manual/fr/reference.pcre.pattern.modifiers.php
http://fr2.php.net/manual/fr/function.preg-replace.php
 
Serious Visiter le site web du posteur
de_prog
Nouveau WRInaute

Inscrit le: 24 Mai 2007
Messages: 28
Localisation: paris

URL permanente de ce messagePosté le : Lun Nov 19, 2007 17:05    Sujet du message: soucis expression reguliere

Merci pour ta réponse

effectivement, c'est quelquechose comme ça qu'il me faut Smile.
j'y arrive pas encore, j'ai fait quelquechose comme ça :

Code:
//$test = preg_replace("/<div class=\"texte\">(.*?)<\/div>$/U", "\\1\\2\\3",$valeur) ;


ça à pas l'air d'être ça encore... mais j'y travaille
 
de_prog
medium69
WRInaute accro
WRInaute accro

Inscrit le: 07 Mai 2005
Messages: 2151
Localisation: Je sais pas trop ;)

URL permanente de ce messagePosté le : Lun Nov 19, 2007 20:57    Sujet du message: soucis expression reguliere

Cela ça devrait être bon

Code:
preg_match('#<div class="content">(.*)</div>#'Us, $texte, $matches); // le paramètre « s » est nécessaire uniquement si il y a des retours à la ligne

echo $matches[0];


Je vois que tu te sert de « / » comme délimiteur. C'est peut-être à cause de moi, car j'ai dû te donner une regex avec ce dernier.
Comme le délimiteur peut être n'importe quel caractère, je l'ai remplacé par « # » ; ainsi tu n'a plus à échappé les « / ».

Dans le code que je te donne il te trouve uniquement ce qui correspond au masque. Si tu veux traiter cette partie, il y à d'autre fonctions :

preg_replace ou preg_replace_callback pour des traitements hards
 
medium69 Visiter le site web du posteur
de_prog
Nouveau WRInaute

Inscrit le: 24 Mai 2007
Messages: 28
Localisation: paris

URL permanente de ce messagePosté le : Mar Nov 20, 2007 9:42    Sujet du message: soucis expression reguliere

effectivement ça fonctionne nikel !!!

en fait, je pensais qu'il suffisait de placer le $ à la fin et le U pour qu'il comprenne de s'arrêter dès le premier </div> mais non...

merci 100000 fois pour tes aides en expression régulière...
 
de_prog
medium69
WRInaute accro
WRInaute accro

Inscrit le: 07 Mai 2005
Messages: 2151
Localisation: Je sais pas trop ;)

URL permanente de ce messagePosté le : Mar Nov 20, 2007 18:00    Sujet du message: soucis expression reguliere

de_prog a écrit:
effectivement ça fonctionne nikel !!!

en fait, je pensais qu'il suffisait de placer le $ à la fin et le U pour qu'il comprenne de s'arrêter dès le premier </div> mais non...

merci 100000 fois pour tes aides en expression régulière...


le $ sert à indiquer la fin de la chaine. ^ pour le début.

Le U permet de rendre la regex moins gourmande ; il n'est pas forcément nécessaire sur toutes les regex, mais il ne mange pas de pain... autant le laisser donc.

Un site parmi tant d'autre sur les regex : http://www.expreg.com/index.php

Tu verras... le jour où tu comptrendra toutes les astuces des regex, tu trouvera que le chinois est un jeu d'enfant Wink
 
medium69 Visiter le site web du posteur
medium69
WRInaute accro
WRInaute accro

Inscrit le: 07 Mai 2005
Messages: 2151
Localisation: Je sais pas trop ;)

URL permanente de ce messagePosté le : Mar Nov 20, 2007 18:04    Sujet du message: soucis expression reguliere

Pour info...

$matches[0] récupère l'ensemble de la chaine répondant au masque.

$matches[1] fonctionnerait dans ce cas, car il récupère le contenu de la première parenthèse ; $matches[2] pour la seconde, etc.

Si tu n'a pas besoin de garder le contenu d'une parenthèse, tu peux la mettre ainsi : (?:tonMasque) le « ?: » permet de ne pas mettre en variable le contenu.

Pour mémoire, les preg sont toujours plus rapide que les ereg.
 
medium69 Visiter le site web du posteur
Serious
WRInaute accro
WRInaute accro

Inscrit le: 21 Nov 2005
Messages: 2437

URL permanente de ce messagePosté le : Mar Nov 20, 2007 18:47    Sujet du message: soucis expression reguliere

medium69 a écrit:
Pour mémoire, les preg sont toujours plus rapide que les ereg.


Meme Wink
Ce n'est pas vrai, ereg() est dans bien des cas plus rapide (jusqu'a 30% plus rapide avec PHP5). Il suffit de faire les tests car ca depend de l'expr rationnelle. Et pour les chaines constantes, strpos() est deux fois plus rapide.
Ces chiffres sont pour un PHP sans accelerateur et peuvent etre completement differents si on en utilise un.
 
Serious Visiter le site web du posteur
medium69
WRInaute accro
WRInaute accro

Inscrit le: 07 Mai 2005
Messages: 2151
Localisation: Je sais pas trop ;)

URL permanente de ce messagePosté le : Mar Nov 20, 2007 18:49    Sujet du message: soucis expression reguliere

Serious a écrit:
medium69 a écrit:
Pour mémoire, les preg sont toujours plus rapide que les ereg.


Meme Wink
Ce n'est pas vrai, ereg() est dans bien des cas plus rapide (jusqu'a 30% plus rapide avec PHP5). Il suffit de faire les tests car ca depend de l'expr rationnelle. Et pour les chaines constantes, strpos() est deux fois plus rapide.
Ces chiffres sont pour un PHP sans accelerateur et peuvent etre completement differents si on en utilise un.


Merci de m'avoir repris sur ce point, car je croyais que c'était toujours d'actualité.

Cela dit, ereg() ne permet pas de recherches complexes.
 
medium69 Visiter le site web du posteur
medium69
WRInaute accro
WRInaute accro

Inscrit le: 07 Mai 2005
Messages: 2151
Localisation: Je sais pas trop ;)

URL permanente de ce messagePosté le : Mar Nov 20, 2007 18:56    Sujet du message: soucis expression reguliere

Serious a écrit:
medium69 a écrit:
Pour mémoire, les preg sont toujours plus rapide que les ereg.


Meme Wink
Ce n'est pas vrai, ereg() est dans bien des cas plus rapide (jusqu'a 30% plus rapide avec PHP5). Il suffit de faire les tests car ca depend de l'expr rationnelle. Et pour les chaines constantes, strpos() est deux fois plus rapide.
Ces chiffres sont pour un PHP sans accelerateur et peuvent etre completement differents si on en utilise un.


Je viens de faire un test ; c'est surprenant... je ne pensais pas que c'était aussi vrai.

Test effectué avec PHP5 sans accélérateur

Code:
// Contrôle du temps d'exécution d'un script
$time_start = microtime(true);

for($nb=0; $nb<1000000; $nb++) {
   $value = 'test de texte - cool - ';
   $test = preg_match('# - $#U', $value);
}

$time_end = microtime(true);
$time = $time_end - $time_start;

echo '<p>le script N°1 a duré '.number_format($time, 3, ',', ' ').' secondes</p>';

$time_start = microtime(true);

for($nb=0; $nb<1000000; $nb++) {
   $value = 'test de texte - cool - ';
   $test = ereg(' - ', $value);
}
$time_end = microtime(true);
$time = $time_end - $time_start;

echo '<p>le script N°2 a duré '.number_format($time, 3, ',', ' ').' secondes</p>';
 
medium69 Visiter le site web du posteur
Serious
WRInaute accro
WRInaute accro

Inscrit le: 21 Nov 2005
Messages: 2437

URL permanente de ce messagePosté le : Mar Nov 20, 2007 20:23    Sujet du message: soucis expression reguliere

J'ai legerement modifie ton script pour tester plusieurs motifs et la conclusion s'impose: ca depend de la regexp.

Code:
pattern:' - '       preg:2,167s  ereg:3,155s  PREG
pattern:' - $'      preg:2,471s  ereg:4,002s  PREG
pattern:'. - '      preg:3,783s  ereg:3,454s  EREG
pattern:'. - $'     preg:4,602s  ereg:4,307s  EREG
pattern:'(.) - '    preg:5,132s  ereg:3,824s  EREG
pattern:'(.) - $'   preg:6,368s  ereg:5,330s  EREG
pattern:'(.*) - '   preg:2,510s  ereg:5,149s  PREG
pattern:'(.*) - $'  preg:2,557s  ereg:6,699s  PREG
pattern:'ext'       preg:2,131s  ereg:2,859s  PREG
pattern:'ext$'      preg:2,195s  ereg:4,030s  PREG
pattern:'.ext'      preg:3,364s  ereg:2,981s  EREG
pattern:'.ext$'     preg:3,707s  ereg:4,296s  PREG
pattern:'(.)ext'    preg:4,426s  ereg:3,288s  EREG
pattern:'(.)ext$'   preg:5,189s  ereg:5,260s  PREG
pattern:'(.*)ext'   preg:3,226s  ereg:4,426s  PREG
pattern:'(.*)ext$'  preg:4,467s  ereg:6,570s  PREG
pattern:'[etx]+'    preg:2,394s  ereg:1,934s  EREG
pattern:'([etx]+)'  preg:2,708s  ereg:2,038s  EREG
pattern:'abc'       preg:1,771s  ereg:1,354s  EREG
pattern:'abc$'      preg:1,788s  ereg:1,353s  EREG
pattern:'.abc'      preg:4,005s  ereg:1,373s  EREG
pattern:'.abc$'     preg:3,978s  ereg:1,362s  EREG
pattern:'(.)abc'    preg:5,826s  ereg:1,381s  EREG
pattern:'(.)abc$'   preg:5,838s  ereg:1,413s  EREG
pattern:'(.*)abc'   preg:4,350s  ereg:1,393s  EREG
pattern:'(.*)abc$'  preg:4,331s  ereg:1,379s  EREG
pattern:'[abc]+'    preg:3,702s  ereg:3,310s  EREG
pattern:'([abc]+)'  preg:4,727s  ereg:3,893s  EREG
pattern:'[a-z]+'    preg:2,429s  ereg:2,022s  EREG
pattern:'([a-z]+)'  preg:2,764s  ereg:2,119s  EREG

total:  preg:109s  ereg:96s


et j'ajouterai qu'ereg a un probleme etonnant de performance dans le traitement du caractere constant '-'.
 
Serious Visiter le site web du posteur
medium69
WRInaute accro
WRInaute accro

Inscrit le: 07 Mai 2005
Messages: 2151
Localisation: Je sais pas trop ;)

URL permanente de ce messagePosté le : Mar Nov 20, 2007 20:40    Sujet du message: soucis expression reguliere

Idéalement, il faudrait testé chaque regex pour savoir quelle fonction utilisée alors Confused

M'enfin, moi qui croyait qu'ereg ne faisait pas le poids ...
 
medium69 Visiter le site web du posteur
de_prog
Nouveau WRInaute

Inscrit le: 24 Mai 2007
Messages: 28
Localisation: paris

URL permanente de ce messagePosté le : Jeu Nov 29, 2007 15:40    Sujet du message: soucis expression reguliere

je suis contente que m'on post m'est apporté autant d'info Smile !!!

merci à vous !! tu as raison medium Wink, déjà ça me paraît au moins plus simple que le chinois mais j'ai encore du boulot pour maîtriser...
 
de_prog
medium69
WRInaute accro
WRInaute accro

Inscrit le: 07 Mai 2005
Messages: 2151
Localisation: Je sais pas trop ;)

URL permanente de ce messagePosté le : Jeu Nov 29, 2007 16:54    Sujet du message: soucis expression reguliere

Pour revenir sur la question de la rapidité entre ereg et preg, j'apporte quelques précisions...

Pensant que cela dépendait du masque de recherche, j'ai refait plusieurs test et de tout mes test, preg est beaucoup plus rapide que ereg sauf dans un cas générique :

Si le masque n'est pas présent, alors ereg est au minimum 50% plus rapide. dans le cas contraire, preg lui rafle la mise à tous les coups !

J'ai donc gardé toutes mes regex en preg.
 
medium69 Visiter le site web du posteur
KOogar
WRInaute accro
WRInaute accro

Inscrit le: 16 Nov 2004
Messages: 2987
Localisation: Bangalore +4h30

URL permanente de ce messagePosté le : Jeu Nov 29, 2007 22:21    Sujet du message: soucis expression reguliere

Interressant de voir ces tests de rapidité, mais rien de nouveau, les fonctions PCRE (preg) ont toujours été bien plus rapide et apportent beaucoup plus d'options que les fonctions POSIX (ereg).
 
KOogar Visiter le site web du posteur
 
Montrer les messages depuis:   
Revenir en haut    Forum -> Développement d'un site Web Toutes les heures sont au format GMT + 1 Heure
Page 1 sur 2 - Aller à la page 1, 2  Suivante
Connexion
Nom d'utilisateur:    Mot de passe:      Se connecter automatiquement à chaque visite    

CLIQUEZ ICI pour vous inscrire à WebRankInfo (forum, annuaire, outils...)

Connexion

© 2001-2005 phpBB Group, support français
Personnalisation : WebRankInfo ™


 ODP  Firefox  Alsacreations  annuaire webmaster Yagoort