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 16/06/2011, 19h16   #1
Membre extrêmement actif
 
Avatar de lodan
 
Inscription : juin 2006
Messages : 1 804
Détails du profil
Informations forums :
Inscription : juin 2006
Messages : 1 804
Points : 587
Points : 587
Par défaut Remplacer un mot par un autre

Bonsoir,

Je veux remplacer les mots numéro, numéros (minuscule ou majuscule, avec ou sans accent) par N°

En javascript je fera

Code :
1
2
var reg = /NUMEROS?/g;
expression = expression.replace(reg, "N°");
Mais en PHP, je n'y arrive pas

Code :
1
2
$reg = 'NUMEROS';
$expression = eregi_replace($reg, "N°", $expression);
Même si je mets "NUMEROS" dans $expression ça ne fonctionne pas.

Merci pour vos lumières.
__________________
Y a pas, plus on fait, plus on sait. Plus on cherche, plus on sait chercher. Maintenant quant à trouver, c'est autre chose.
lodan est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/06/2011, 21h31   #2
Membre du Club
 
Avatar de MinDBuSteR
 
Homme
Développeur informatique
Inscription : juin 2011
Messages : 35
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Val d'Oise (Île de France)

Informations professionnelles :
Activité : Développeur informatique

Informations forums :
Inscription : juin 2011
Messages : 35
Points : 44
Points : 44
Bonsoir,

Peut être devrais tu utiliser la fonction strtr.

Ce qui pourrait donner :

Code :
1
2
3
4
5
6
7
<?php
$expression = 'NUMEROS';
echo $expression."<br />";
$remplacements = array('NUMEROS' => 'N°');
$expression = strtr($expression, $remplacements);
echo $expression;
?>
Grâce à cette fonction tu peut même faire plusieurs modification sur une même chaine de caractère grâce au array dans $remplacement.


Bien à toi en espérant t'avoir aidé.
MinDBuSteR est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/06/2011, 22h52   #3
Membre Expert
 
Inscription : septembre 2010
Messages : 1 242
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 1 242
Points : 1 564
Points : 1 564
Les expressions régulières avec php c'est preg...

Tu peux utiliser aussi strtr comme indiqué par MinDBuSteR mais à savoir que cette fonction n'est pas compatible utf-8. Par contre str_replace est compatible avec tous les encodages.
__________________
- Réalisations
- Interface graphique : génération en javascript d'objets défilants, texte et/ou images, mode horizontal ou vertical.
ABCIWEB est déconnecté   Envoyer un message privé Réponse avec citation 01
Vieux 17/06/2011, 09h48   #4
Membre actif
 
Avatar de hazamor
 
Homme
Développeur Web
Inscription : décembre 2008
Messages : 179
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 27

Informations professionnelles :
Activité : Développeur Web
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : décembre 2008
Messages : 179
Points : 199
Points : 199
Envoyer un message via MSN à hazamor
Par défaut 2 solutions (avec preg_replace et eregi_replace)

Voilà 2 solutions (avec preg_replace et eregi_replace):
Code :
1
2
3
4
5
6
7
8
9
10
 
$expression='NUMEROS';
$exp_resultat = preg_replace('!num[eé]ros!i', "N& #176;", $expression);
echo $exp_resultat;
 
 
echo '<br>';
$expression='NUMEROS';
$reg = 'NUM[eé]rOS';
echo $expression = eregi_replace($reg, "N& #176;", $expression);
NB: Veillez supprimer l'espace entre & et #, j'ai le mis car il est transformé directement en ° lors de l'envoi de réponse
hazamor est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 17/06/2011, 09h52   #5
Modérateur
 
Inscription : septembre 2010
Messages : 7 103
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 7 103
Points : 8 466
Points : 8 466
faut pas oublier de rajouter les limites de mot \b
__________________
http://blog.stealth35.com/
stealth35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/06/2011, 10h04   #6
Membre extrêmement actif
 
Avatar de lodan
 
Inscription : juin 2006
Messages : 1 804
Détails du profil
Informations forums :
Inscription : juin 2006
Messages : 1 804
Points : 587
Points : 587
Merci à vous

J'ai donc suivi l'excellent lien de ABCIWEB et j'ai fait comme ceci :

Code :
1
2
3
 
$mots = "numero";
$expression = preg_replace('`\b('.$mots.')[sx]?\b`si', "N°", $expression);
__________________
Y a pas, plus on fait, plus on sait. Plus on cherche, plus on sait chercher. Maintenant quant à trouver, c'est autre chose.
lodan est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/06/2011, 10h16   #7
Membre actif
 
Avatar de hazamor
 
Homme
Développeur Web
Inscription : décembre 2008
Messages : 179
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 27

Informations professionnelles :
Activité : Développeur Web
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : décembre 2008
Messages : 179
Points : 199
Points : 199
Envoyer un message via MSN à hazamor
Citation:
Envoyé par lodan Voir le message
...
Code :
1
2
3
 
$mots = "numero";
$expression = preg_replace('`\b('.$mots.')[sx]?\b`si', "N°", $expression);
ça ne marche pas avec les accents, vous pouvez le tester avec

hazamor est déconnecté   Envoyer un message privé Réponse avec citation 02
Vieux 17/06/2011, 10h30   #8
Modérateur
 
Inscription : septembre 2010
Messages : 7 103
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 7 103
Points : 8 466
Points : 8 466
pour les accent il faut rajouter l'option u, l'option s et i ne sert a rien ici, faut pensé faire un preg_quote sur le $mot, je te déconseille vivement de mettre l'opérateur d'exécution en délimiteur
__________________
http://blog.stealth35.com/
stealth35 est déconnecté   Envoyer un message privé Réponse avec citation 01
Vieux 17/06/2011, 10h54   #9
Membre actif
 
Avatar de hazamor
 
Homme
Développeur Web
Inscription : décembre 2008
Messages : 179
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 27

Informations professionnelles :
Activité : Développeur Web
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : décembre 2008
Messages : 179
Points : 199
Points : 199
Envoyer un message via MSN à hazamor
Par défaut N'abuser pas l'utilisation de système de vote !

Citation:
Envoyé par hazamor Voir le message
ça ne marche pas avec les accents, vous pouvez le tester avec


L'un de membres de ce forum a voter contre mon dernier réponse, je croix qu'il n'est pas d'accord. Mais je défend mon réponse et je le rappel par la demande de @lodan

Citation:
Envoyé par lodan Voir le message
Je veux remplacer les mots numéro, numéros (minuscule ou majuscule, avec ou sans accent) par N°
et je demande à lui de tester avant voter !
En plus j'aime bien que le modérateur de faire attention au abus d'utilisation de vote!!
j'aime bien que vous ne supprimer pas ce message car c'est un point important et je vais partir de ce message pour poser le problème cet abus au forum d'évolutions de club (http://www.developpez.net/forums/f80...olutions-club/)
hazamor est déconnecté   Envoyer un message privé Réponse avec citation 04
Vieux 01/07/2011, 16h29   #10
Membre régulier
 
Homme
Étudiant
Inscription : juin 2011
Messages : 55
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Val d'Oise (Île de France)

Informations professionnelles :
Activité : Étudiant
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : juin 2011
Messages : 55
Points : 77
Points : 77
pourquoi t'embêter avec une regex qui est extrêmement coûteuse, plutôt qu'un simple
Code :
$chaine_corrigee = str_ireplace(array('numero','numeros','numéro','numéros'),'N°',$chaine_depart);
Avalion est déconnecté   Envoyer un message privé Réponse avec citation 11
Vieux 01/07/2011, 19h13   #11
Rédacteur
 
Avatar de jreaux62
 
Homme Jérôme Réaux
Webdesigner
Inscription : août 2008
Messages : 2 993
Détails du profil
Informations personnelles :
Nom : Homme Jérôme Réaux
Âge : 45
Localisation : France, Pas de Calais (Nord Pas de Calais)

Informations professionnelles :
Activité : Webdesigner
Secteur : Arts - Culture

Informations forums :
Inscription : août 2008
Messages : 2 993
Points : 5 786
Points : 5 786
Envoyer un message via Skype™ à jreaux62
Je corrigerais comme suit (les mots au pluriel avant ceux au singulier) :
Code :
1
2
3
<?php
$chaine_corrigee2 = str_ireplace(array('numeros','numéros','numero','numéro'),'N°',$chaine_depart);
?>
en effet (exemple) :
Code :
1
2
3
4
5
6
7
8
<?php
$chaine_depart = 'le numéro des NUméros est un NUMERO à numéROS';
echo $chaine_depart.'<br />';		// le numéro des NUméros est un NUMERO à numéROS
$chaine_corrigee1 = str_ireplace(array('numero','numeros','numéro','numéros'),'N°',$chaine_depart);	// non
echo $chaine_corrigee1.'<br />';	// le N° des N°s est un N° à N°S
$chaine_corrigee2 = str_ireplace(array('numeros','numéros','numero','numéro'),'N°',$chaine_depart); 	// OK
echo $chaine_corrigee2.'<br />';	// le N° des N° est un N° à N°
?>
Un bémol cependant :
- "numéroter" va donner "N°ter"
- "numérotation" va donner "N°tation"
.....
La solution est dans les regex :
Code :
1
2
3
4
5
<?php
$chaine_depart = 'la numérotation des NUméros est un NUmeRO à numéROS';
$chaine_corrigee3 = preg_replace('`\b('.'num[eé]ro'.')[s]?\b`i', 'N°', $chaine_depart);
echo $chaine_corrigee3.'<br />';	// la numérotation des N° est un N° à N°
?>
CQFD
__________________
"Ce qui se conçoit bien s'énonce clairement - Et les mots pour le dire arrivent aisément."
Nicolas Boileau-Despréaux, Homme de lettres français (1636-1711), principal théoricien de l'esthétique classique.
Site perso Mes tutos DVP : Gestion-Affichage de Nouvelles - Affichage en tableau HTML - Fonctions de redimensionnement d'images
jreaux62 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/07/2011, 01h40   #12
Membre régulier
 
Homme
Étudiant
Inscription : juin 2011
Messages : 55
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Val d'Oise (Île de France)

Informations professionnelles :
Activité : Étudiant
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : juin 2011
Messages : 55
Points : 77
Points : 77
oui tu as raison sur tous tes points ^^ mea culpa sorry ^^
Avalion 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 19h19.


 
 
 
 
Partenaires

Hébergement Web