preg_replace ne tenant pas compte du lettrage

Mammouth du PHP | 1339 Messages

09 juin 2006, 20:30

Bonjour.

Je cherche en vain comment remplacer du texte contenant le meme mot ecris differament.

Je souhaiterais transformer :

Code : Tout sélectionner

Linux<br />LiNuX<br />linuX
avec ce genre de resultat :

Code : Tout sélectionner

<a href="http://www.unlienquejindique.com" alt="Liens vers %s">%s</a>
Et cela en gardant la facon dont le mot est "ecrit".

J'ai tester d'inserer des choses comme \\1 pour recuperer le mot, mais comment recuperer le mot dans la lettrine qu'il est ?

J'espere avoir ete assez clair.

Merci, Elie
Bon sinon tu me fais un message privé et on se fait un TeamViewer

Invité
Invité n'ayant pas de compte PHPfrance

09 juin 2006, 21:00

Heu... je ne sais pas si j'ai compris juste... :roll:
$var = "LiNuX"; // ou Linux ou LINUX, etc...
$var = preg_replace("!linux!i", "<a href=\"http://www.unlienquejindique.com\" alt=\"Liens vers $0\">$0</a>", $var);
echo $var;

Mammouth du PHP | 1339 Messages

09 juin 2006, 21:11

Tu dechires !

Merci beaucoup !
Bon sinon tu me fais un message privé et on se fait un TeamViewer

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

09 juin 2006, 21:13

Comme cela t'a été illustré dans l'exemple précédent, c'est effectivement l'attribut "i" qu'il faut utiliser à la fin de ton pattern pour le rendre insensible à la casse des lettres (majuscules/minuscules)

Eléphant du PHP | 60 Messages

09 juin 2006, 21:47

C'était moi au cas où ^^

J'avais oublié de me connecter :oops:

De rien Elie ;)

Mammouth du PHP | 1339 Messages

10 juin 2006, 18:26

Je me permet de remettre un peu le sujet d'actualité ...

Comment remplacer que les mots contenant un espace avant et un espaces apres ...

Que si je recherche "Linux" il ne me change pas "linuxiens"...

Merci, Elie
Bon sinon tu me fais un message privé et on se fait un TeamViewer

Modérateur PHPfrance
Modérateur PHPfrance | 6373 Messages

10 juin 2006, 18:53

En modifiant le modèle à rechercher, soit cette partie :
"!linux!i"

ViPHP
ViPHP | 1380 Messages

11 juin 2006, 09:06

Et en utilisant l'assertion \b qui est faite pour ça. Elle marquera la séparation de mot. Cette assertion a égalemement une caractéristique particulière, c'est qu'elle ne consomme pas de caractères. Le mieux est de la voir à l'oeuvre dans un exemple
ripat

Mammouth du PHP | 1339 Messages

12 juin 2006, 12:35

Je relance encore une fois le sujet parce que ca m'interesse :)

Voici le code actuel :
$fichier = preg_replace("#\b".$_POST['mot_recherche']."s?\b#i",stripslashes($_POST['remplace_par']),$fichier);
Cela trouve le mot 'non sensitivement', au pluriel ou non, et contenant des espaces avant et apres pour bien l'isoler.

Je voulais en plus savoir comment ne selectionner les mots contenu entre les crochets > et < pour eviter de modifier des mots contenu dans les balises HTML.

Le mot ne doit pas etre collé au balise >< mais contenu entre les deux pour etre sur que ce n'est ni de la source HTML, ni du PHP :)

Pareil que pour \b, juste un exemple me suffirait pour mon apprentissage.

Merci, Elie
Bon sinon tu me fais un message privé et on se fait un TeamViewer

ViPHP
ViPHP | 1380 Messages

12 juin 2006, 15:20

Le problème de remplacement dans ou hors balises n'est pas évident. J'ai proposé sur ce forum une solution qui marche dans la plupart des cas. Mais, comme souvent dans les regex, il y a des exceptions où cette solution ne marchera pas.

Voir ici:
http://www.phpfrance.com/forums/viewtopic.php?t=199
ripat