blocage sur preg_replace je m'en sort pas

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 : blocage sur preg_replace je m'en sort pas

par brani » 09 janv. 2006, 01:23

Salut,

Merci beaucoup pour ton aide je mensore bien maintenan
j'ai appri comment faire maintenant grace a toi.

quand est ce que je vais devenir un crack du php comme ca moi aussi
j'aiderai les autre sur ce forum ? bientot j'espere.


merci

par Ripat » 08 janv. 2006, 09:49

Il n'y a pas d'erreur de syntaxe dans ta regex mais bien de logique. C'est assez curieux à première vue, mais normal. Un preg_replace repère d'abord toutes les occurrences d'un motif et ensuite seulement procède au remplacement.

Donc dans son travail de repérage des chaînes à remplacer, tu lui demandes de capturer, par exemple le mot suis précédé et suivi par un espace.

Il va repérer:

je vers je aller sortir voila c\'est fini je suis suis je comme quoi...

Tu remarqueras que les autres je, suis ne sont plus précédés par un espace! Ils ne seront donc pas repérés et remplacés.

Bon, comment faire alors? Comme toujours en regex, plusieurs possibilités:
  • Utiliser l'assertion magique \b qui marque une séparation de mot (y compris la ponctuation) et qui ne consomme pas de caractères (important!):
    $chaine = preg_replace('#\b(suis|je|aidez)\b#', null, $chaine);
    
    // ou, pour gagner (un poil) en rapidité, retirer le caractère capturant des parenthèses.
    $chaine = preg_replace('#\b(?:suis|je|aidez)\b#', null, $chaine);
  • Le plus rapide (de 2 à 10 fois plus rapide selon la longueur du texte).
    Faire plusieurs preg_replace plutôt qu'un seul:
    $mots = array('#\bsuis\b#', '#\bje\b#', '#\baidez\b#');
    $chaine = preg_replace($mots, null, $chaine);

blocage sur preg_replace je m'en sort pas

par brani » 08 janv. 2006, 01:07

Bonjour,

voila jéssay de faire une regex mais je n'arive pas au résultat que je veut.

voila j'ai un text ex
<?php

$chaine = 'je vers je aller sortir voila c\'est fini je suis suis je comme quoi 
je devien fou alors aider moi je suis pas bien heu si si trés pas bien, mais 
qu\'est ce que je raconte ?';

// je veut retirer les mots (suis, je, aider)
// au départ je fesai comme ça

$chaine = str_replace (' suis ', ' ', $chaine);
$chaine = str_replace (' je ', ' ', $chaine);
$chaine = str_replace (' aider ', ' ', $chaine);

// seulement voila je doit avoir 50 ligne comme ça
// alors j'ai décider de trouver quelque chose de simple et rapide.

//j'ai opter pour ça

$chaine = preg_replace('! suis | je | aider !i', ' ', $chaine);
// seulement voila il me supprime pas tout les (je, suis, aider)

?>
voila ca fait maintenan 2h que je suis entrain de chercher et j'ai pas avancer depuis.
une petite aide ca m'aiderai bien