| |
Savez-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.
|
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
|
Posté 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. |
|
| |
|
 |
Serious WRInaute accro

Inscrit le: 21 Nov 2005 Messages: 2437
|
|
| |
|
 |
de_prog Nouveau WRInaute
Inscrit le: 24 Mai 2007 Messages: 28 Localisation: paris
|
Posté 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 .
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 |
|
| |
|
 |
medium69 WRInaute accro

Inscrit le: 07 Mai 2005 Messages: 2151 Localisation: Je sais pas trop ;)
|
Posté 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 |
|
| |
|
 |
de_prog Nouveau WRInaute
Inscrit le: 24 Mai 2007 Messages: 28 Localisation: paris
|
Posté 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... |
|
| |
|
 |
medium69 WRInaute accro

Inscrit le: 07 Mai 2005 Messages: 2151 Localisation: Je sais pas trop ;)
|
Posté 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  |
|
| |
|
 |
medium69 WRInaute accro

Inscrit le: 07 Mai 2005 Messages: 2151 Localisation: Je sais pas trop ;)
|
Posté 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. |
|
| |
|
 |
Serious WRInaute accro

Inscrit le: 21 Nov 2005 Messages: 2437
|
Posté 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
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. |
|
| |
|
 |
medium69 WRInaute accro

Inscrit le: 07 Mai 2005 Messages: 2151 Localisation: Je sais pas trop ;)
|
Posté 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
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 WRInaute accro

Inscrit le: 07 Mai 2005 Messages: 2151 Localisation: Je sais pas trop ;)
|
Posté 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
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>'; |
|
|
| |
|
 |
Serious WRInaute accro

Inscrit le: 21 Nov 2005 Messages: 2437
|
Posté 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 '-'. |
|
| |
|
 |
medium69 WRInaute accro

Inscrit le: 07 Mai 2005 Messages: 2151 Localisation: Je sais pas trop ;)
|
Posté 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
M'enfin, moi qui croyait qu'ereg ne faisait pas le poids ... |
|
| |
|
 |
de_prog Nouveau WRInaute
Inscrit le: 24 Mai 2007 Messages: 28 Localisation: paris
|
Posté 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 !!!
merci à vous !! tu as raison medium , déjà ça me paraît au moins plus simple que le chinois mais j'ai encore du boulot pour maîtriser... |
|
| |
|
 |
medium69 WRInaute accro

Inscrit le: 07 Mai 2005 Messages: 2151 Localisation: Je sais pas trop ;)
|
Posté 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. |
|
| |
|
 |
KOogar WRInaute accro

Inscrit le: 16 Nov 2004 Messages: 2987 Localisation: Bangalore +4h30
|
Posté 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). |
|
| |
|
 |
| |
|
|
|
|
Autres sujets de discussion :
|
|