soucis expression reguliere
16 messages • Page 1 sur 2 • 1, 2
Consultez la formation au référencement naturel Google de WebRankInfo / Ranking Metrics
soucis expression reguliere
Bonjour,
j'utilise un expression reguliere simple pour délimiter ce qui se trouve à l'intérieur d'une div :
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.
j'utilise un expression reguliere simple pour délimiter ce qui se trouve à l'intérieur d'une div :
- Code: Tout sélectionner
$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.
preg_replace avec PCRE_UNGREEDY
http://fr2.php.net/manual/fr/reference. ... ifiers.php
http://fr2.php.net/manual/fr/function.preg-replace.php
http://fr2.php.net/manual/fr/reference. ... ifiers.php
http://fr2.php.net/manual/fr/function.preg-replace.php
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 :
ça à pas l'air d'être ça encore... mais j'y travaille
effectivement, c'est quelquechose comme ça qu'il me faut
j'y arrive pas encore, j'ai fait quelquechose comme ça :
- Code: Tout sélectionner
//$test = preg_replace("/<div class=\"texte\">(.*?)<\/div>$/U", "\\1\\2\\3",$valeur) ;
ça à pas l'air d'être ça encore... mais j'y travaille
Cela ça devrait être bon
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
- Code: Tout sélectionner
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
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...
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 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
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.
$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 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.
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.
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: Tout sélectionner
// 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>';
J'ai legerement modifie ton script pour tester plusieurs motifs et la conclusion s'impose: ca depend de la regexp.
et j'ajouterai qu'ereg a un probleme etonnant de performance dans le traitement du caractere constant '-'.
- Code: Tout sélectionner
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 '-'.
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.
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.
16 messages • Page 1 sur 2 • 1, 2
Formation recommandée sur ce thème :
Formation Référencement naturel Google : apprenez une méthode efficace pour optimiser à fond le référencement naturel dans Google de façon durable... Formation animée par Olivier Duffez et Fabien Facériès, experts en référencement naturel.
Tous les détails sur le site Ranking Metrics : programme, prix, dates et lieux, inscription en ligne.
Lectures recommandées sur ce thème :
- Froogle, l'annuaire du shopping selon Google
- Sandbox, blacklistage et autres pénalités de Google
- Google met à jour sa recherche locale
- Nouvelle étude de WebRankInfo : les mots-clés et le référencement
- La calculatrice Google
- Impact du PageRank dans le positionnement Google
- Google Suggest API
- Google News : trucs et astuces
- Les bonnes stratégies de mots-clés pour le référencement
- Google Trends
- re expression régulière...
- Expression régulière
- expression réguliere!please help!!!
- Expression régulière simple
- expression régulière en javascript
- problème expression régulière
- RedirectMatch et expression régulière
- Expression Régulière Malformée ?
- Expression régulière et redirect
- mauvaise expression reguliere?
- expression réguliére particuliére...
- RewriteRule Expression reguliere et boucle
- expression reguliere d'un url
- Help sur une expression régulière
- Ecriture d'une expression régulière
Qui est en ligne
Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 0 invités



le forum