Remplacer un mot dans une phrase avec php.
Résolu/Fermé
luluwebmaster
Messages postés
409
Date d'inscription
mardi 19 février 2013
Statut
Membre
Dernière intervention
3 février 2018
-
Modifié par luluwebmaster le 12/11/2013 à 16:13
luluwebmaster Messages postés 409 Date d'inscription mardi 19 février 2013 Statut Membre Dernière intervention 3 février 2018 - 23 nov. 2013 à 21:41
luluwebmaster Messages postés 409 Date d'inscription mardi 19 février 2013 Statut Membre Dernière intervention 3 février 2018 - 23 nov. 2013 à 21:41
A voir également:
- Remplacer un mot dans une phrase avec php.
- Remplacer un mot par un autre word - Guide
- Piratage facebook changer mot de passe - Guide
- Remplacer disque dur par ssd - Guide
- Mettre un mot de passe sur un dossier - Guide
- Faire une phrase avec les mots suivants ✓ - Forum Loisirs / Divertissements
5 réponses
Utilisateur anonyme
Modifié par nagashima le 12/11/2013 à 16:19
Modifié par nagashima le 12/11/2013 à 16:19
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
luluwebmaster
Messages postés
409
Date d'inscription
mardi 19 février 2013
Statut
Membre
Dernière intervention
3 février 2018
5
12 nov. 2013 à 16:24
12 nov. 2013 à 16:24
Le soucis, c'est que je veux pas remplacer un chaîne, mais un mot, contenu dans une variable
luluwebmaster
Messages postés
409
Date d'inscription
mardi 19 février 2013
Statut
Membre
Dernière intervention
3 février 2018
5
12 nov. 2013 à 16:53
12 nov. 2013 à 16:53
J'essais de comprend un peux le code donné, mais c'est compliqué,
car le code donné ne répond pas a mon exemple ( a moins que je ne le comprenne pas comme il faut ).
car le code donné ne répond pas a mon exemple ( a moins que je ne le comprenne pas comme il faut ).
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
luluwebmaster
Messages postés
409
Date d'inscription
mardi 19 février 2013
Statut
Membre
Dernière intervention
3 février 2018
5
12 nov. 2013 à 17:20
12 nov. 2013 à 17:20
Je viens de tester le code, ilme retourne ça :
TA NOUVELLE CHAINE Jeux. lune
Moi, je ne veux pas qu'il me retourne ça, je veux qu'il me remplace le "je" par "TA NOUVELLE CHAINE"
je ne connais pas bien la fonction preg_replace, et expressions régulières.
TA NOUVELLE CHAINE Jeux. lune
Moi, je ne veux pas qu'il me retourne ça, je veux qu'il me remplace le "je" par "TA NOUVELLE CHAINE"
je ne connais pas bien la fonction preg_replace, et expressions régulières.
luluwebmaster
Messages postés
409
Date d'inscription
mardi 19 février 2013
Statut
Membre
Dernière intervention
3 février 2018
5
12 nov. 2013 à 20:14
12 nov. 2013 à 20:14
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.
luluwebmaster
Messages postés
409
Date d'inscription
mardi 19 février 2013
Statut
Membre
Dernière intervention
3 février 2018
5
13 nov. 2013 à 07:47
13 nov. 2013 à 07:47
C'est le $ https://www.commentcamarche.net/contents/803-php-expressions-regulieres
.
Mais je dois placer ou et comment les caractère qui détermine la fin ?
.
Mais je dois placer ou et comment les caractère qui détermine la fin ?
'/[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 ;)
luluwebmaster
Messages postés
409
Date d'inscription
mardi 19 février 2013
Statut
Membre
Dernière intervention
3 février 2018
5
13 nov. 2013 à 10:21
13 nov. 2013 à 10:21
Je regarde le tuto de ccm, mais c'est compliqué.
luluwebmaster
Messages postés
409
Date d'inscription
mardi 19 février 2013
Statut
Membre
Dernière intervention
3 février 2018
5
17 nov. 2013 à 17:09
17 nov. 2013 à 17:09
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é.
luluwebmaster
Messages postés
409
Date d'inscription
mardi 19 février 2013
Statut
Membre
Dernière intervention
3 février 2018
5
19 nov. 2013 à 07:48
19 nov. 2013 à 07:48
$texte = preg_replace('/[^$\s\n](mon_mot[\s\r\b\.\,\ \?\!\:\;])/', nouveau_mot, $texte);
luluwebmaster
Messages postés
409
Date d'inscription
mardi 19 février 2013
Statut
Membre
Dernière intervention
3 février 2018
5
19 nov. 2013 à 09:01
19 nov. 2013 à 09:01
Je viens de faire un test :
Le mot n'est pas remplacé.
<?php $texte = "Je suis un texte avec mon_mot "; while ( preg_match('/[^$\s\n](mon_mot[\s\r\b\.\,\ \?\!\:\;])/',$texte) != 0) { $texte = preg_replace('/[^$\s\n](mon_mot[\s\r\b\.\,\ \?\!\:\;])/', 'nouveau_mot', $texte); } echo $texte; ?>
Le mot n'est pas remplacé.
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
luluwebmaster
Messages postés
409
Date d'inscription
mardi 19 février 2013
Statut
Membre
Dernière intervention
3 février 2018
5
22 nov. 2013 à 20:51
22 nov. 2013 à 20:51
Ok, merci beaucoup !
Problème résolut !
C'était super bien expliqué, merci à toi !
Problème résolut !
C'était super bien expliqué, merci à toi !
luluwebmaster
Messages postés
409
Date d'inscription
mardi 19 février 2013
Statut
Membre
Dernière intervention
3 février 2018
5
23 nov. 2013 à 21:41
23 nov. 2013 à 21:41
Merci beaucoup !