Remplacer un mot dans une phrase avec php.
Résolu
luluwebmaster
Messages postés
430
Statut
Membre
-
luluwebmaster Messages postés 430 Statut Membre -
luluwebmaster Messages postés 430 Statut Membre -
Hello tout le monde,
je suis face a un problème assez embarrassent :
J'ai un chaîne de caractère de type
<?php
$chaine = "Je suis une chaîne de caractères.<br />
Jeux.
lune";
?>
Dans cette chaîne de caractère, je voudrais trouver juste le MOT "je", ou "une", et le remplacer par un autre.
J'utilise la fonction str_replace de PHP.
Le soucis qu'il y a avec cette fonction, c'est qu'elle va chercher dans tous les mots si la chaîne demandé n'y est pas.
Ex :
Je veux cherche le mot "je".
Il me remplacera le mot "je" ET le mot "jeux" ce que je ne veux pas.
De même pour le mot "une".
Comment remédier à ce problème ?
Merci d'avance.
Merci a tout ceux qui répondrons a mes problème ^^
je suis face a un problème assez embarrassent :
J'ai un chaîne de caractère de type
<?php
$chaine = "Je suis une chaîne de caractères.<br />
Jeux.
lune";
?>
Dans cette chaîne de caractère, je voudrais trouver juste le MOT "je", ou "une", et le remplacer par un autre.
J'utilise la fonction str_replace de PHP.
Le soucis qu'il y a avec cette fonction, c'est qu'elle va chercher dans tous les mots si la chaîne demandé n'y est pas.
Ex :
Je veux cherche le mot "je".
Il me remplacera le mot "je" ET le mot "jeux" ce que je ne veux pas.
De même pour le mot "une".
Comment remédier à ce problème ?
Merci d'avance.
Merci a tout ceux qui répondrons a mes problème ^^
A voir également:
- Remplacer un mot dans une phrase avec php.
- Remplacer un mot dans word - Guide
- Trousseau mot de passe iphone - Guide
- Mot de passe - Guide
- Remplacer disque dur par ssd - Guide
- Mot de passe administrateur - Guide
5 réponses
salut,
regarde du côté des expression régulières.
Pour ton cas tu pourras identifier ta chaine par :
en ignorant la casse :
ce qui peu donner en php :
tu peux faire des tests et afficher le code php correspondant ici :
https://www.myregextester.com/index.php
naga
regarde du côté des expression régulières.
Pour ton cas tu pourras identifier ta chaine par :
en ignorant la casse :
sans ignorer la casse :
[^$\s\n]*(je[\s\r]).*
[^$\s\n]*([Jj]{1}[eE]{1}[\s\r]).*
ce qui peu donner en php :
<?php
$sourcestring="your source string";
echo preg_replace('/[^$\s\n]*([Jj]{1}[eE]{1}[\s\r]).*/','TA NOUVELLE CHAINE',$sourcestring);
?>
tu peux faire des tests et afficher le code php correspondant ici :
https://www.myregextester.com/index.php
naga
Le soucis, c'est que je veux pas remplacer un chaîne, mais un mot, contenu dans une variable
as-tu regardé l'aide de preg_replace?
En gros, tu lui dis " si tu trouve une chaine de ce type [dans ton cas, 'je'], remplace le par '...' [ta nouvelle chaine donc]" , et lui te renvoi la nouvelle valeur.
Pour ce qui est de la chaine qui doit te sembler étrange, il faut que tu te renseigne sur les expressions régulières et leur construction (je t'ai déjà donné le lien pour tester).
Dans l'exemple que je t'ai donné, le test n'est bien sûr pas à faire sur
- soit en début de chaine
- soit aprèsun espace
- soit après un saut de ligne
- soit après la fermeture d'une balise
et qu'il se termine
- soit en fin de chaine
- soit par un espace
- soit par un saut de ligne
- soit après l'ouverture d'une balise
(je pense avoir fait le tour, mais à vérifier au cas où)
naga
En gros, tu lui dis " si tu trouve une chaine de ce type [dans ton cas, 'je'], remplace le par '...' [ta nouvelle chaine donc]" , et lui te renvoi la nouvelle valeur.
Pour ce qui est de la chaine qui doit te sembler étrange, il faut que tu te renseigne sur les expressions régulières et leur construction (je t'ai déjà donné le lien pour tester).
Dans l'exemple que je t'ai donné, le test n'est bien sûr pas à faire sur
$sourcestringmais sur ta chaine , soit faire :
<?phpsi tu veux le faire en le codant toi-même, il faut que tu test tous tes caractères, en prennant en compte le fait que "je" doit être complet, c'est à dire qu'il faut qu'il commence
$chaine = "Je suis une chaîne de caractères.<br />
Jeux.
lune";
echo preg_replace('/[\s\n>]*([Jj]{1}[eE]{1}[\s\r<]).*/','TA NOUVELLE CHAINE',$chaine);
?>
- soit en début de chaine
- soit aprèsun espace
- soit après un saut de ligne
- soit après la fermeture d'une balise
et qu'il se termine
- soit en fin de chaine
- soit par un espace
- soit par un saut de ligne
- soit après l'ouverture d'une balise
(je pense avoir fait le tour, mais à vérifier au cas où)
naga
Re,
le code fonctionne bien, mais j'aimerais encore savoir une chose :
le code ne détecte pas un mot a la fin d'un texte, sans qu'il y ai un trou juste après ce dernier.
C'est possible de remédier à ce problème ?
Merci beaucoup.
le code fonctionne bien, mais j'aimerais encore savoir une chose :
le code ne détecte pas un mot a la fin d'un texte, sans qu'il y ai un trou juste après ce dernier.
C'est possible de remédier à ce problème ?
Merci beaucoup.
'/[Jj]{1}[eE]{1}[\s$]{1}/'
en tant que dernier caractère, vu que le caractère qui suivra sera soit un espace soit une fin de chaine, on énumère les possibilitée entre les crochets ( [ ] ) et je dis de n'en prendre qu'un ( {1} ).
Tu as des tutoso très bien sur les expressions régulières et bien que ca semble plutot difficile dans un premier abord à cause de la synthaxe, c'est en fait plutôt simple, au début t'essaye plein de possibilités qui marcheront pas avant d'avoir la bonne expression, et petit à petit tu trouve la bonne plus vite, faut comprendre et pratiquer quoi, comme un peu tout ;)
Salut,
j'ai cette chaine :
/[^$\s\n]*(Mon_mot[\s\r\b\.\,\ \?\!\:\;]{1})/
Le soucis est le même qu'avec str_replace, il rne distingue pas chaque, puis recherche le mot demandé.
j'ai cette chaine :
/[^$\s\n]*(Mon_mot[\s\r\b\.\,\ \?\!\:\;]{1})/
Le soucis est le même qu'avec str_replace, il rne distingue pas chaque, puis recherche le mot demandé.
oui, tu ne lui dis pas qu'il peu y avoir d'autre caractères (je n'ai pas vérifier ton expression avant).
soit :
je me repete, mais tu peux tester tes expressions régulières en ligne. Par exemple : https://www.myregextester.com/index.php
naga
soit :
/[^$\s\n].*?(mon_mot[\s\r\b\.\,\ \?\!\:\;]?).*/
je me repete, mais tu peux tester tes expressions régulières en ligne. Par exemple : https://www.myregextester.com/index.php
naga
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question