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 06/05/2007, 09h03   #1
Membre éclairé
 
Avatar de Space Cowboy
 
Inscription : avril 2005
Messages : 495
Détails du profil
Informations forums :
Inscription : avril 2005
Messages : 495
Points : 306
Points : 306
Par défaut Besoin d'une expression pour formater une chaîne

la chaine : Ballade de l'acier
Résultat souhaité : balladedelacier

Je peut faire certaine chose en php, mais il me faudrait plusieurs fonction. J'aimerais utiliser cette "fonction" plusieurs dizaine de fois dans une page, et j'imagine qu'utiliser une regexp prend moins de ressources que 4 fonction hp imbriquée ...

strtolower pour mettre en minuscule.
Pour les espaces, je ne connais qu'un moyen, c'est de parcourir la chaine caractère par caractère ...
Space Cowboy est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/05/2007, 11h00   #2
En attente de confirmation mail
 
Inscription : juin 2002
Messages : 6 164
Détails du profil
Informations forums :
Inscription : juin 2002
Messages : 6 164
Points : 6 404
Points : 6 404
Code :
1
2
3
4
5
6
7
8
9
10
11
$patterns = array(
    '/([A-Z])/e',
    '/[\'\s]/'
);
 
$replacement = array(
    'strtolower("$1")',
    ''
);
 
$out = preg_replace($patterns, $replacement, $in);
J'espère ne pas avoir oublier d'ingrédient
julp est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/05/2007, 11h34   #3
Membre éclairé
 
Avatar de Space Cowboy
 
Inscription : avril 2005
Messages : 495
Détails du profil
Informations forums :
Inscription : avril 2005
Messages : 495
Points : 306
Points : 306
Ce n'est pas possible de faire ca en une seule regexp plutot que d'utiliser deux tableau ?
Tu est obligé d'utiliser strlower ?
Space Cowboy est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/05/2007, 11h53   #4
En attente de confirmation mail
 
Inscription : juin 2002
Messages : 6 164
Détails du profil
Informations forums :
Inscription : juin 2002
Messages : 6 164
Points : 6 404
Points : 6 404
Citation:
Envoyé par Space Cowboy
Tu est obligé d'utiliser strlower ?
Comment faire sans ? J'en ai oublié de simplifier :
Code :
$out = preg_replace('/[\'\s]/', '', strtolower($in));
(décidément je ne suis pas réveillé)
julp est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/05/2007, 13h23   #5
Membre éclairé
 
Avatar de Space Cowboy
 
Inscription : avril 2005
Messages : 495
Détails du profil
Informations forums :
Inscription : avril 2005
Messages : 495
Points : 306
Points : 306
Et moi vraiment pas doué pour les regexp ...
Ca fonctionne très bien.

Pour info, cette regexp m'évitera de taper des milliers de fois le nom d'une icone/capture associé à un objet dans une base de donnée.
Space Cowboy est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/05/2007, 14h05   #6
Membre éclairé
 
Avatar de Space Cowboy
 
Inscription : avril 2005
Messages : 495
Détails du profil
Informations forums :
Inscription : avril 2005
Messages : 495
Points : 306
Points : 306
J'avais modifier la regexp,

Citation:
<?php
      $patterns 
= array      (
                                          
'/([A-Z])/e',
                                          
'/[\'\s]/',
                                          
'/[\:\s]/'
                                    
);
       
      
$replacement = array(
                                          
'strtolower("$1")',
                                          
'',
                                          
''
                                    
);
      return 
preg_replace($patterns$replacement$nom);

?>
Comment integrer tout ca dans une seule, ca doit être quelque chose comme ca :
return preg_replace('/[\'\s]/([A-Z])/e/[\:\s]', '', strtolower($nom));

Mais la syntaxe ....
Space Cowboy est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/05/2007, 15h08   #7
En attente de confirmation mail
 
Inscription : juin 2002
Messages : 6 164
Détails du profil
Informations forums :
Inscription : juin 2002
Messages : 6 164
Points : 6 404
Points : 6 404
Code :
return preg_replace('/[\'\s:]/', '', strtolower($nom));


Mais je vous recommande de lire : Initiation aux expressions régulières en PHP avant de vous lancer.
julp est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/05/2007, 15h25   #8
Membre éclairé
 
Avatar de Space Cowboy
 
Inscription : avril 2005
Messages : 495
Détails du profil
Informations forums :
Inscription : avril 2005
Messages : 495
Points : 306
Points : 306
J'ai déjà essayé deux trois fois ...
Space Cowboy est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/05/2007, 15h46   #9
Nouveau Membre du Club
 
Inscription : janvier 2007
Messages : 59
Détails du profil
Informations personnelles :
Localisation : France, Maine et Loire (Pays de la Loire)

Informations forums :
Inscription : janvier 2007
Messages : 59
Points : 33
Points : 33
Envoyer un message via MSN à u115rcu
bonjour,
quelle serait la différence en utilisant cela:

Code :
$titre1 = str_replace(" ","",$titre1);
La détection du motif est sans doute moins précise, merci de me donner un retour !
u115rcu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/08/2007, 10h29   #10
Membre éclairé
 
Avatar de Space Cowboy
 
Inscription : avril 2005
Messages : 495
Détails du profil
Informations forums :
Inscription : avril 2005
Messages : 495
Points : 306
Points : 306
quand tu a plusieurs caractère à remplace (é,',ê,è,â,à etc ...) je préfére avoir un tableau contenant les chaines à remplacer et les chaine qui les remplaceront. C'est plus esthétiques".

Quand il n'y a qu'un seul caractère à supprimer, par exemple les espaces blanc, il est préférable d'utiliser : $titre1 = str_replace(" ","",$titre1);
Space Cowboy 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 10h42.


 
 
 
 
Partenaires

Hébergement Web