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 26/01/2008, 18h51   #1
Rédacteur/Modérateur
 
Avatar de troumad
 
Homme Bernard SIAUD
Enseignant
Inscription : novembre 2003
Messages : 4 400
Détails du profil
Informations personnelles :
Nom : Homme Bernard SIAUD
Âge : 44
Localisation : France, Rhône (Rhône Alpes)

Informations professionnelles :
Activité : Enseignant
Secteur : Enseignement

Informations forums :
Inscription : novembre 2003
Messages : 4 400
Points : 4 940
Points : 4 940
Par défaut Motif <br/> pour preg_replace

Bonjour

Je cherche à remplacer les <br/> d'un texte par des sauts de lignes :
Code :
1
2
3
4
5
6
   $motif[0]='/&nbsp;/';
   $remplacement[0]=' ';
   $motif[1]='/<br/';
   $remplacement[1]='
';
   $champ[8]=preg_replace($motif, $remplacement, $champ[8]);
Mon problème, c'est que comme ça, je ne remplace que les <br et si je mets $motif[1]='/<br/>/'; ou $motif[1]='/<br///>/'; , j'ai
Code :
Warning: preg_replace() [function.preg-replace]: Unknown modifier '>' in /chemin/recup_fic_etu.php on line 40
Si je mets $motif[1]='/<br//>/';, l'erreur est Unknown modifier '/'

Que mettre ?
__________________
Modérateur Mandriva Linux
Amicalement VOOotre
Troumad Alias Bernard SIAUD à découvrir sur http://troumad.org
Mes tutoriels
troumad est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/01/2008, 19h36   #2
Membre éclairé
 
Avatar de makmaoui
 
Développeur Web
Inscription : mai 2007
Messages : 282
Détails du profil
Informations personnelles :
Âge : 26
Localisation : France, Nord (Nord Pas de Calais)

Informations professionnelles :
Activité : Développeur Web

Informations forums :
Inscription : mai 2007
Messages : 282
Points : 361
Points : 361
Salut,

si tu fais un simple remplacement tu peux utiliser la fonction str_replace(), cela va donner :

Code :
1
2
3
4
5
6
 
<?php
 
$chaine = str_replace('<br/>' , "\n" , $chaine);
 
?>
makmaoui est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/01/2008, 20h27   #3
Rédacteur/Modérateur
 
Avatar de troumad
 
Homme Bernard SIAUD
Enseignant
Inscription : novembre 2003
Messages : 4 400
Détails du profil
Informations personnelles :
Nom : Homme Bernard SIAUD
Âge : 44
Localisation : France, Rhône (Rhône Alpes)

Informations professionnelles :
Activité : Enseignant
Secteur : Enseignement

Informations forums :
Inscription : novembre 2003
Messages : 4 400
Points : 4 940
Points : 4 940
Merci

Ça marche, mais j'ai l'impression d'avoir contourné le problème

Je trouverais beaucoup plus joli d'avoir une commande de moins avec le preg_replace !
Je cherche donc encore l'astuce , mais pour le moment, j'ai quelque chose qui marche !
__________________
Modérateur Mandriva Linux
Amicalement VOOotre
Troumad Alias Bernard SIAUD à découvrir sur http://troumad.org
Mes tutoriels
troumad est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/01/2008, 22h06   #4
Rédacteur/Modérateur
 
Avatar de troumad
 
Homme Bernard SIAUD
Enseignant
Inscription : novembre 2003
Messages : 4 400
Détails du profil
Informations personnelles :
Nom : Homme Bernard SIAUD
Âge : 44
Localisation : France, Rhône (Rhône Alpes)

Informations professionnelles :
Activité : Enseignant
Secteur : Enseignement

Informations forums :
Inscription : novembre 2003
Messages : 4 400
Points : 4 940
Points : 4 940
J'ai un problème plus grave pour la transformation inverse :
Code :
1
2
3
4
5
6
7
8
  /*$motif[0]='/&nbsp;/';
  $remplacement[0]=' ';
  $motif[1]="/<br////>/";
  $remplacement[1]="\n";*/
  $info=str_replace(" ", "<br/>" , $info);
  $adresse=str_replace("\n" , "<br/>" , $adresse);
  $info=str_replace(' ',"&nbsp;" , $info);
  $adresse=str_replace(' ',"&nbsp;" , $adresse);
La transformation de l'espace en &nbsp; ne marche même pas avec preg_replace
Mais dans certains cas, il est pire... Parfois, même après le remplacement il me reste un saut de ligne : je me trouve avec alors que j'aurais souhaitéMais pas dans tous les cas !!!!

preg_replace est beaucoup plus intéressant dans mon cas car je traite plusieurs chaînes en même temps !

J'espère que la nuit va porter conseil ! Bonne nuit à tous
__________________
Modérateur Mandriva Linux
Amicalement VOOotre
Troumad Alias Bernard SIAUD à découvrir sur http://troumad.org
Mes tutoriels
troumad est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/01/2008, 22h17   #5
Modérateur
 
Avatar de mathieu
 
Inscription : juin 2003
Messages : 4 893
Détails du profil
Informations forums :
Inscription : juin 2003
Messages : 4 893
Points : 4 466
Points : 4 466
Citation:
Envoyé par troumad Voir le message
preg_replace est beaucoup plus intéressant dans mon cas car je traite plusieurs chaînes en même temps !
"str_replace" permet aussi ça en mettant des tableaux comme arguments
par contre tu as besoin de connaitre la liste entière des modifications possibles. est ce que tu as juste besoin de modifier "<br>" et "<br/>" ou bien tu dois aussi traiter <bR> ou "<br />" par exemple ?
__________________
Modérateur PHP
mathieu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/01/2008, 08h21   #6
Rédacteur/Modérateur
 
Avatar de troumad
 
Homme Bernard SIAUD
Enseignant
Inscription : novembre 2003
Messages : 4 400
Détails du profil
Informations personnelles :
Nom : Homme Bernard SIAUD
Âge : 44
Localisation : France, Rhône (Rhône Alpes)

Informations professionnelles :
Activité : Enseignant
Secteur : Enseignement

Informations forums :
Inscription : novembre 2003
Messages : 4 400
Points : 4 940
Points : 4 940
Bonjour

Pour les changements, c'est juste :
- <br/> => saut de ligne
- &nbsp; => espace
Il n'y aura rien autre.

Je me dis de plus en plus qu'il faudra que je cherche à comprendre les expressions régulières ! À quand le courage final ?
__________________
Modérateur Mandriva Linux
Amicalement VOOotre
Troumad Alias Bernard SIAUD à découvrir sur http://troumad.org
Mes tutoriels
troumad est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/01/2008, 11h08   #7
Rédacteur/Modérateur
 
Avatar de troumad
 
Homme Bernard SIAUD
Enseignant
Inscription : novembre 2003
Messages : 4 400
Détails du profil
Informations personnelles :
Nom : Homme Bernard SIAUD
Âge : 44
Localisation : France, Rhône (Rhône Alpes)

Informations professionnelles :
Activité : Enseignant
Secteur : Enseignement

Informations forums :
Inscription : novembre 2003
Messages : 4 400
Points : 4 940
Points : 4 940
Bon, il me semble que ça marche !
Mon problème venait du symbole que j'utilisais pour encadrer mon expression régulière !

Si j'ai compris (à vous de me dire si je me trompe), le premier caractère est choisi pour encadrer l'expression, donc pour encadrer on a beaucoup de choix (mais pas les caractères ou \).
Ceci donne :
Code :
1
2
3
4
5
6
   $motif[0]='`&nbsp;`';
   $remplacement[0]=' ';
   $motif[1]="`<br/>`";
   $remplacement[1]="\n";
   $champ[8]=preg_replace($motif, $remplacement, $champ[8]);
   $champ[9]=preg_replace($motif, $remplacement, $champ[9]);
dans un sens et
Code :
1
2
3
4
5
6
  $motif[0]='&nbsp;';
  $remplacement[0]='`[ ]`';
  $motif[1]="<br/>";
  $remplacement[1]="`[[:cntrl:]]`";
  $adresse=preg_replace($remplacement, $motif, $adresse);
  $info=preg_replace($remplacement, $motif, $info);
dans l'autre.

Je pensais qu'un simple échange de remplacement et motif dans preg_replace allait suffir : je me trompais encore !
__________________
Modérateur Mandriva Linux
Amicalement VOOotre
Troumad Alias Bernard SIAUD à découvrir sur http://troumad.org
Mes tutoriels
troumad est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/01/2008, 12h23   #8
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

Pour le remplacement newline/tag, tu devrais utiliser la fonction nl2br()

Sinon, voici une regex pour le remplacement tag/newline :
__________________
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 27/01/2008, 13h05   #9
Rédacteur/Modérateur
 
Avatar de troumad
 
Homme Bernard SIAUD
Enseignant
Inscription : novembre 2003
Messages : 4 400
Détails du profil
Informations personnelles :
Nom : Homme Bernard SIAUD
Âge : 44
Localisation : France, Rhône (Rhône Alpes)

Informations professionnelles :
Activité : Enseignant
Secteur : Enseignement

Informations forums :
Inscription : novembre 2003
Messages : 4 400
Points : 4 940
Points : 4 940
Citation:
Envoyé par Yogui Voir le message
Pour le remplacement newline/tag, tu devrais utiliser la fonction nl2br()
Crois-tu qu'elle est plus complète que le système que je propose ?
Si oui, pourquoi ?

Citation:
Envoyé par Yogui Voir le message
Sinon, voici une regex pour le remplacement tag/newline :
Je ne comprends pas exactement ce que fait ceci
le \s sert à quoi ? il marque l'espace ? Je ne vois pas ça sur la doc que je regarde ! Avec le * qui indique qu'il peut en avoir plusieurs ou aucun ?
le /? indique que le / peut être absent.
Comme je connais l'origine de mes fichiers, je n'ai pas besoin de cet artéfact
__________________
Modérateur Mandriva Linux
Amicalement VOOotre
Troumad Alias Bernard SIAUD à découvrir sur http://troumad.org
Mes tutoriels
troumad est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/01/2008, 13h35   #10
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
Au temps pour moi, si tu connais l'origine de tes fichiers alors tu n'as pas besoin de regex. Utlise une simple fonction de remplacement de chaînes, cela fera gagner tes scripts en légèreté (quantité de mémoire + temps d'exxécution).
De manière générale, une regex sans classe ni wildcard n'a aucun intérêt.

Sinon oui, tu as bien compris la regex que je te proposais

Et pour nl2br, c'est tout simplement la fonction prévue à cet effet
__________________
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 27/01/2008, 16h02   #11
Rédacteur/Modérateur
 
Avatar de troumad
 
Homme Bernard SIAUD
Enseignant
Inscription : novembre 2003
Messages : 4 400
Détails du profil
Informations personnelles :
Nom : Homme Bernard SIAUD
Âge : 44
Localisation : France, Rhône (Rhône Alpes)

Informations professionnelles :
Activité : Enseignant
Secteur : Enseignement

Informations forums :
Inscription : novembre 2003
Messages : 4 400
Points : 4 940
Points : 4 940
Citation:
Envoyé par Yogui Voir le message
Et pour nl2br, c'est tout simplement la fonction prévue à cet effet
Je la mets en commentaire dans mon code. Pour le moment, je trouve plutôt bien l'idée de faire un tableau pour modifier toutes mes chaînes en une seule instruction preg_replace($remplacement, $motif, $adresse);.
__________________
Modérateur Mandriva Linux
Amicalement VOOotre
Troumad Alias Bernard SIAUD à découvrir sur http://troumad.org
Mes tutoriels
troumad est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/01/2008, 16h10   #12
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
Si tu regardes les benchmarks effectués par Mathieu Fernandez, tu verras qu'éviter preg_replace() est souvent appréciable
http://m-fernandez.developpez.com/ar...p/bench/#LVIII
__________________
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/02/2009, 15h06   #13
Membre habitué
 
Avatar de Mitaka
 
Inscription : avril 2003
Messages : 188
Détails du profil
Informations personnelles :
Âge : 29
Localisation : France, Rhône (Rhône Alpes)

Informations forums :
Inscription : avril 2003
Messages : 188
Points : 125
Points : 125
j'avais le même problème
Merci pour les infos ça m'aide beaucoup dans mon code.
Mitaka 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 07h30.


 
 
 
 
Partenaires

Hébergement Web