preg_replace ne tenant pas compte du lettrage

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : preg_replace ne tenant pas compte du lettrage

par Ripat » 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

par Elie » 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

par Ripat » 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

par ouckileou » 10 juin 2006, 18:53

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

par Elie » 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

par Sineljogy » 09 juin 2006, 21:47

C'était moi au cas où ^^

J'avais oublié de me connecter :oops:

De rien Elie ;)

par Ryle » 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)

par Elie » 09 juin 2006, 21:11

Tu dechires !

Merci beaucoup !

par Invité » 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;

preg_replace ne tenant pas compte du lettrage

par Elie » 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