Précédent   Forum des professionnels en informatique > PHP > Langage > Regex
Regex Forum d'entraide sur les expressions rationnelles PHP. Avant de poster -> FAQ regex, Cours de regex et Sources de regex
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 15/08/2006, 13h18   #1
Membre Expert
 
Avatar de Anduriel
 
Homme
Étudiant
Inscription : février 2004
Messages : 2 168
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : février 2004
Messages : 2 168
Points : 1 277
Points : 1 277
Par défaut Remplacer une chaîne récurrente

Salut,

J'ai une chaine, ici <p>&nbsp;</p>, que je souhaite remplacer si elle se repètes trop de fois à la suite. Je sais faire ça pour un caractère, mais je n'ai aucune idée pour une chaine entière...
Voila ce que j'ai:

Code :
$text = preg_replace("#(\<p\>&nbsp;\</p\>){".$sautslignes."}#Us", "<p>&nbsp;</p>", $result['Text']);
Mais ça me rajoute des paragraphes partout
Anduriel est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/08/2006, 17h51   #2
Membre Expert
 
Avatar de Anduriel
 
Homme
Étudiant
Inscription : février 2004
Messages : 2 168
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : février 2004
Messages : 2 168
Points : 1 277
Points : 1 277
Aucune idée ou j'ai mal expliqué?
Anduriel est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/08/2006, 18h01   #3
Rédacteur
 
Avatar de Yogui
 
Homme Guillaume Rossolini
Directeur technique
Inscription : février 2004
Messages : 13 720
Détails du profil
Informations personnelles :
Nom : Homme Guillaume Rossolini
Localisation : France

Informations professionnelles :
Activité : Directeur technique

Informations forums :
Inscription : février 2004
Messages : 13 720
Points : 17 355
Points : 17 355
Salut

Je pense que tu peux utiliser les quantifieurs entre accolades :
  • {3,5} signifie 3, 4 ou 5 fois
  • {3,} signifie à partir de 3 fois
__________________
Mes articles - Zend Certified Engineer (PHP + Zend Framework)
Ressources PHP - Ressources Zend Framework
Yogui est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/08/2006, 19h19   #4
Membre Expert
 
Avatar de Anduriel
 
Homme
Étudiant
Inscription : février 2004
Messages : 2 168
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : février 2004
Messages : 2 168
Points : 1 277
Points : 1 277
Merci de ta réponse mais même si je rajoute la virgule, aucun remplacement n'est fait (mais cette fois, pas de problème de sauts à tout va...).

Merci
Anduriel est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/08/2006, 19h22   #5
Membre Expert
 
Avatar de Anduriel
 
Homme
Étudiant
Inscription : février 2004
Messages : 2 168
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : février 2004
Messages : 2 168
Points : 1 277
Points : 1 277
Oops je retire ce que j'ai dit ça a l'air de fonctionner Merci
Anduriel est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/08/2006, 20h00   #6
Membre Expert
 
Avatar de Anduriel
 
Homme
Étudiant
Inscription : février 2004
Messages : 2 168
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : février 2004
Messages : 2 168
Points : 1 277
Points : 1 277
Si quelqu'un peut m'aider à réfléchir je lui en serai reconnaissant...
J'ai un texte:

Citation:
<p>Text</p><p>&nbsp;</p><p>&nbsp;</p><p>&nbsp;</p><p>&nbsp;</p><p>&nbsp;</p><p>&nbsp;</p><p>Text</p>
J'ai une option qui autorise seulement 4 sauts de paragraphe vide.
Voila ce que je fais:

Code :
$text = preg_replace("#(\<p\>&nbsp;\</p\>){".($sautslignes+1).",}#Us", "", $result['Text']);
"Prendre le 4ième + 1 (à partir du 5ième inclu) jusqu'à ce qu'il n'y ai plus de <p>&nbsp</p> et les supprimer"

Mais comme résultat j'ai:

Citation:
<p>Text</p><p>&nbsp;</p><p>Text</p>
Anduriel est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/08/2006, 20h41   #7
Rédacteur
 
Avatar de Yogui
 
Homme Guillaume Rossolini
Directeur technique
Inscription : février 2004
Messages : 13 720
Détails du profil
Informations personnelles :
Nom : Homme Guillaume Rossolini
Localisation : France

Informations professionnelles :
Activité : Directeur technique

Informations forums :
Inscription : février 2004
Messages : 13 720
Points : 17 355
Points : 17 355
Code :
1
2
3
4
5
6
7
8
9
10
<?php
 
define('EMPTY_PARAGRAPH', '<p>&nbsp;</p>');
 
$string = str_repeat(EMPTY_PARAGRAPH, 9);
 
echo htmlentities(preg_replace('#(?:'.EMPTY_PARAGRAPH.'){5,}#is', str_repeat(EMPTY_PARAGRAPH, 4), $string));
exit;
 
?>
Ceci remplace les occurences (5 fois et plus) de paragraphes vides par 4 paragraphes vides.

[Edit] Info : le modificateur "U" qui faisait foirer ta regex. Il l'empêchait de prendre autant de paragraphes que possible.
__________________
Mes articles - Zend Certified Engineer (PHP + Zend Framework)
Ressources PHP - Ressources Zend Framework
Yogui est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/08/2006, 22h09   #8
Membre Expert
 
Avatar de Anduriel
 
Homme
Étudiant
Inscription : février 2004
Messages : 2 168
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : février 2004
Messages : 2 168
Points : 1 277
Points : 1 277
Merci beaucoup ton code marche parfaitement. Par contre une question: pourquoi le {5,} puisqu'ensuite tu remplaces par 4x ma chaine? Moi je verrai plutot un {1, } pour tout prendre non?
Anduriel est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/08/2006, 22h41   #9
Rédacteur
 
Avatar de Yogui
 
Homme Guillaume Rossolini
Directeur technique
Inscription : février 2004
Messages : 13 720
Détails du profil
Informations personnelles :
Nom : Homme Guillaume Rossolini
Localisation : France

Informations professionnelles :
Activité : Directeur technique

Informations forums :
Inscription : février 2004
Messages : 13 720
Points : 17 355
Points : 17 355
Dans ton premier message, tu dis "si elle se répète trop de fois à la suite". J'ai donc supposé que tu ne voulais pas que ça apparaisse plus de 4 fois mais qu'1, 2 et 3 sont des nombres possibles.
Maintenant, je pense que tu peux l'adapter à tes besoins, n'est-ce pas ?
__________________
Mes articles - Zend Certified Engineer (PHP + Zend Framework)
Ressources PHP - Ressources Zend Framework
Yogui est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/08/2006, 14h28   #10
Membre Expert
 
Avatar de Anduriel
 
Homme
Étudiant
Inscription : février 2004
Messages : 2 168
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : février 2004
Messages : 2 168
Points : 1 277
Points : 1 277
Oui j'ai adapté. Mais avec ton code je croyais que ça laissait les 4 premiers termes, et les suivant étaient remplacés par 4 fois encore le termes (donc 8).

L'essentiel c'est que ça fonctionne
Merci
Anduriel est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 05h21.


 
 
 
 
Partenaires

Hébergement Web