Preg_replace

gadj0dil0 Messages postés 39 Statut Membre -  
tryan44 Messages postés 1381 Statut Membre -
Bonjour,

Je souhaiterais trouver un code plus simple pour ce qui suit.

$Dep = "(D(é|e)part)";
$dep = "(d(é|e)part)";
$DEP = "(DEPART)";
$s = "s";
$S = "S";
$pd = "pd";
$line = preg_replace("/\b$Dep$s\b/", "<a href=\"/?p=$pd\" class=\"stick\">Départs</a>", $line);
$line = preg_replace("/\b$Dep\b/", "<a href=\"/?p=$pd\" class=\"stick\">Départ</a>", $line);
$line = preg_replace("/\b$dep$s\b/", "<a href=\"/?p=$pd\" class=\"stick\">départs</a>", $line);
$line = preg_replace("/\b$dep\b/", "<a href=\"/?p=$pd\" class=\"stick\">départ</a>", $line);
$line = preg_replace("/\b$DEP$S\b/", "<a href=\"/?p=$pd\" class=\"stick\">DEPARTS</a>", $line);
$line = preg_replace("/\b$DEP\b/", "<a href=\"/?p=$pd\" class=\"stick\">DEPART</a>", $line);
$line = preg_replace("/\b$pd\b/", "departs", $line);

Actuellement le code remplace
DEPART par <a href="/?p=departs" class="stick">DEPART</a>
DEPARTS par <a href="/?p=departs" class="stick">DEPARTS</a>
Départs par <a href="/?p=departs" class="stick">Départs</a>
Départ par <a href="/?p=departs" class="stick">Départ</a>
départs par <a href="/?p=departs" class="stick">départs</a>
départ par <a href="/?p=departs" class="stick">départ</a>
Departs par <a href="/?p=departs" class="stick">Départs</a>
Depart par <a href="/?p=departs" class="stick">Départ</a>
departs par <a href="/?p=departs" class="stick">départs</a>
depart par <a href="/?p=departs" class="stick">départ</a>

Soit remplacer une chaine par un lien en respectant la casse et en corrigeant la faute d'accentuation.

remarque : difficulté supplémentaire du lien qui lui ne doit pas être modifié et qui est lui même une forme de la chaine à remplacer.

Merci

13 réponses

tryan44 Messages postés 1381 Statut Membre 220
 
Salut,

A la final, ils doivent ressembler à quoi vos liens? Je pose cette question parce que entre tout en majuscule, avec ou sans "s", avec ou sans accent...
0
gadj0dil0 Messages postés 39 Statut Membre
 
salut

Vous ne voyez pas? C'est écrit >>
"
Actuellement le code remplace
...
depart par <a href="/?p=departs" class="stick">départ</a>
"
Mes liens doivent ressembler à ceux qu'ils sont actuellement.

voilà, la lecture du code en français :
Si la première lettre est en majuscule la laisser
si le mot est en minuscule le laisser
si le mot est en majuscule le laisser
si un des ces trois cas comporte un "s" le laisser
et dans tous les cas remplacer le "e" par un "é"

Celà fonctionne bien mais j'aimerais un code plus simple, voire plus joli, éventuellement créer une fonction. Combiner ucword, ucfirst, substr pourquoi pas, d'autres fonctions que j'ignore, un tableau, etc.

Je cherche un moyen de respecter le mot écrit en y ajoutant le lien (mais le pb n'est pas là, juste un souci que le "depart" du lien lui ne doit pas être modifié) et ajouter un accent aigu ci celui ci est oublié.

J'aimerais trouver dans le "remplacement" de preg_match une variable qui reprend l'occurence et non une constante.

Merci
0
tryan44 Messages postés 1381 Statut Membre 220
 
Peut être que :
<?php
function remplace($texte){
  //on remplace le lien par un @
  $chaine = str_replace('<a href="/?p=departs" class="stick">','@',$texte);
  //on remplace e par é
  $accent = str_replace('e','é',$chaine);
  //on remplace @ par le lien
  $texte = str_replace('@','<a href="/?p=departs" class="stick">',$accent);
  return $texte;
}

 $DEP = 'DePARTS <a href="/?p=departs" class="stick">DePARTS</a>';
 echo remplace($DEP);
?>

Cette fonction va uniquement remplacer le "e" par un "é".
0
gadj0dil0 Messages postés 39 Statut Membre
 
Merci,

Je ne peux pas utiliser la fonction "deprecated" str_replace, sinon je dois passer sun une version antérieure de PHP mais je garde le principe de la fonction.
Je cherche le moyen d'ajouter un lien à un mot qui peut être écrit en minuscule, en majuscule, avec uniquement la première lettre en majuscule au singulier ou/et au pluriel. Dans ce principe je ne cherche même pas à corriger la chaine. C'est la ou je cherche quelque chose de vraiment plus simple.
Pour la correction du "e" vers le "é" là c'est diférent, je souhaite effectivement corriger, transformer le mot, en plus d'ajouter le lien.

suis-je clair?
Je cherche une piste.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
tryan44 Messages postés 1381 Statut Membre 220
 
Re peut être que :)...

La première fonction remplace un mot dans une chaîne.
La seconde fonction remplace une lettre dans une chaîne et construit l'url à partir de cette chaîne.

Les 2 fonctions utilisent preg_replace() et retourne une url du type Départs <a href="/?p=departs" class="stick">Départs</a> alors que le mot d'origine est Departs.
<?php
 function remplace($texte){
 //on explore la chaine en prenant comme séparateur un espace
 $explore = explode(' ',$texte);
 //$explore[0] contient le premier mot qui est en double dans la chaine
 //on remplace le "e" par "é" du mot
 $remplace = preg_replace('#e#', 'é', $explore[0]);
 //on remplace le mot dans $explore[0] par le mot modifié de $remplace contenu dans la chaine d'origine
 $texte = preg_replace('#'.$explore[0].'#',$remplace,$texte);
 return $texte;
 }
 
 $DEP = 'Departs <a href="/?p=departs" class="stick">Departs</a>';
 echo remplace($DEP);
 
 //------fonction 2------->
 
 function remplace2($texte){
 //on remplace le "e" par "é" du mot
 $remplace_mot = preg_replace('#e#', 'é', $texte);
 //lien
 $lien = '<a href="/?p=departs" class="stick">';
 //construction du lien
 $texte = "$remplace_mot $lien$remplace_mot</a>";
 return $texte;
 } 
 
 $DEP2 = 'Departs';
 echo remplace2($DEP2);
?>
0
gadj0dil0 Messages postés 39 Statut Membre
 
Merci encore

Je n'ai pas du te donner tous les éléments :
Je lis un fichier généré par un formulaire.

Ce fichier s'affiche dans le site et je le transforme :
le mot en question (en majuscule ou minuscule, au pluriel ou au singulier) devient un lien, tout en respectant sa casse et en corrigeant le "e" en "é".

En je travaille sur un mot dans un texte ($line)
Explode devrait marcher justement.
Si tu as encore un peu de temps n'hésite pas, merci
0
tryan44 Messages postés 1381 Statut Membre 220
 
Je suis largué...

Concrètement, il ressemble à quoi le fichier qui est généré (son contenu) et comment l'affichez-vous?
Ce fichier généré est un fichier texte, php, html, autre..?
0
gadj0dil0 Messages postés 39 Statut Membre
 
merci en tous cas de te pencher dessus
0
tryan44 Messages postés 1381 Statut Membre 220
 
J'aime bien me triturer les neurones :) mais ça ne répond pas à ma dernière question.
0
gadj0dil0 Messages postés 39 Statut Membre
 
le site ccm.net bug
0
gadj0dil0 Messages postés 39 Statut Membre
 
Le fichier est un fichier texte, le contenu d'un pop-up (div hidden ou visible)
0
gadj0dil0 Messages postés 39 Statut Membre
 
Quand je met le contenu sur la discussion il me valide, des que je raffraichis mon post disparait
0
tryan44 Messages postés 1381 Statut Membre 220
 
C'est le robots du site qui éjecte votre poste car il considère que certains éléments de celui-ci sont hors charte. Il faut faire un signalement pour qu'un modo le valide.
0
gadj0dil0 Messages postés 39 Statut Membre
 
ca y est c passé, ce sont des retour de chariot qui ne passaient pas à mon avis
Le site est buggué
0
gadj0dil0 Messages postés 39 Statut Membre
 
PROCHAINS DEPARTS


SORTIE TOUS LES JOURS DE 10H A 17H!!!



DU 12 AU 15 AOUT PARTICIPEZ SUR ALTAIR "AUX BRAN BAS DES REGATES" DE ST MALO

DU SPORT ET GRAND SPECTACLE
0
gadj0dil0 Messages postés 39 Statut Membre
 
$LE = "LE";
$ROBOT_DONT_LIKE = "BRAN".$LE." BAS DE REGATES";

:)
0
tryan44 Messages postés 1381 Statut Membre 220
 
Heuuuu...c'est quoi le rapport entre votre 1er poste et celui-ci?
J'ai l'impression que vous souhaitez pouvoir corriger n'importe quelle mot et pas seulement 1 seul.
Moi je suis resté sur le mot "depart" qui doit être corrigé si il manque l'accent + lien sur celui-ci...
0
gadj0dil0 Messages postés 39 Statut Membre
 
Le rapport :

Je reprend ce que j'ai écrit plus haut :
Le fichier est un fichier texte, le contenu d'un pop-up (div hidden ou visible) :

Le contenu :

PROCHAINS DEPARTS


SORTIE TOUS LES JOURS DE 10H A 17H!!!



DU 12 AU 15 AOUT PARTICIPEZ SUR ALTAIR "AUX BRAN BAS DES REGATES" DE ST MALO

DU SPORT ET GRAND SPECTACLE
0
gadj0dil0 Messages postés 39 Statut Membre
 
$sp = ""; 
$mot = "((D|d)(E|é|e)(PART|part)(S|s|$sp))";


il me trouve bien les mots, mais après je ne peux remplacer que les résultats par une constante et pas le mot d'origine
0
kaneagle Messages postés 96817 Date d'inscription   Statut Modérateur Dernière intervention   14 610
 
Bonjour,

Il n'y a pas de bug.

Le robot n'aime pas certains mots.

L'être humain est à son mieux quand les choses sont au pire.
0
tryan44 Messages postés 1381 Statut Membre 220
 
Bha la je sèche..hormis comparer 2 tableaux avec tout les mots à modifier, je ne vois pas.
0