IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

preg_replace ne marche pas [RegEx]


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre actif
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    102
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 102
    Par défaut preg_replace ne marche pas
    Salut.

    J'ai un bug "à la MS-DOS", j'entend par là que tout est bon, mais qu'après 2h de vérification intense, il lâche rien

    EXTRAIT CONCERNÉ
    Voici un bout de ma fonction cat_edit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    // On ajoute les morceaux suivant que le nombre d'annonces est pair ou impair
    	if (is_pair($num)) {
    		$sample = $path_samples . "/cat_pair.htm";
    		$replace_with = file_get_contents($sample);
    		$pattern = '#				        <tr>
    				          <td>&nbsp;</td>
    				          <td>&nbsp;</td>
    			            </tr>#';
    		$content = preg_replace($pattern, $replace_with, $content) or exit("preg_replace a échoué (fichier cat_edit.php, ligne 39)");
    	}
    	if (!is_pair($num)) {
    		$sample = $path_samples . "/cat_impair.htm";
    		$replace_with = file_get_contents($sample);
    		$pattern = '#			              </TABLE></td>
    				          <td>&nbsp;</td>#';
    		$content = preg_replace($pattern, $replace_with, $content) or exit("preg_replace a échoué (fichier cat_edit.php, ligne 46)");
    	}
    - Cette fonction prend le contenu d'un fichier cat.htm ($content) qui est la catégorie où sont stockées des annonces, et l'analyse.
    - Elle détermine le nombre d'annonces qu'il y a déjà (avant le bout de code ici présent).
    - Suivant un nombre pair ou impair d'annonces (is_pair()), elle va chercher tel ou tel morceaux basique de code ($sample)...
    - ... qu'elle colle au bon endroit avec un preg_replace() (les $pattern servent à celà)

    - et après elle change des trucs dans le fichier mais tout ça fonctionne, pas besoin d'en parler ici.

    PROBLEME :
    - Si le nombre d'annonce est impair, le bout de code présent dans cat_impair.htm n'est pas ajouté à cat.htm

    VÉRIFICATIONS DÉJA EFFECTUÉES :
    - si le nombre d'annonces est pair ça fonctionne (le bout de code est ajouté).
    - la boucle "if (!is_pair($num))" est bien lue en cas de nombre impair.
    - le fichier "cat_impair.htm" est adéquat.
    - la $pattern est adéquate (tout correspond et s'emboîte parfaitement, virtuellement parlant).
    - il n'y a bien qu'une fois la $pattern dans le fichier escompté (donc pas de risque de confusion qui laisserait le code pantois).
    - $replace_with contient bien le morceau de code (donc "cat_impair.htm" est bien lu).
    edit :
    - je viens de tester une pattern plus simple, sur une ligne presque vide à la fin du fichier, et le morceau est bien collé !


    PISTES :
    - c'est au moment où preg_replace() est utilisé que ça ne fonctionne pas
    - la pattern dérange, dans sa forme ? (pourtant l'autre ne dérange pas ! )...
    edit :
    - oui la pattern dérange dans sa forme ! Mais je dois absolument l'utiliser, pas moyen de faire autrement

    need help !

  2. #2
    Membre Expert
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 418
    Par défaut
    Salut,



    En analysant comment sont obtenus les sections blanches avant <tr> et avant </TABLE></td> ,
    je vois une différence:

    '#\t\t\t\t <tr>' pour premier

    '#\t\t\t </TABLE></td>' pour second
    Il n’y a pas le même nombre de tabulations.
    Est-ce qu’il ne manquerait pas une tabulation \t dans le second $pattern ?
    Qui aurait été remplacé par 8 blancs pour rattraper la même longueur de blanc.....

    Ça ne fait pas la même chose pour une regex.







    Soit dit en passant, je vois une mauvaise pratique dans ton code: la valeur de $pattern est créée chaque fois que c’est nécessaire , c’est à dire après que le programme soit entré dans if (is_pair($num)) ou dans if (!is_pair($num))

    C’est à dire que le programme va passer son temps à redonner une valeur différente à $pattern s’il est passé au tour précédent dans l’autre section.

    Ce qu’il faut faire c’est créer une variable $pattern_pair et une autre $pattern_impair , définies en dehors de la boucle, et qui seront appelées chaque fois que nécessaire sans avoir à les recréer à chaque fois.

  3. #3
    Membre actif
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    102
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 102
    Par défaut Résolu !
    Une banale histoire d'espaces et de tabulation.

    - j'ai affichés les caractères spéciaux dans Notepad++
    - et j'ai mis les bons espaces/tabulations dans les pattern, et dans les fichiers .htm, en rapport au fichier cat.htm.

    la méthode scientifique !

    edit : j'avais pas rafraichi la page avant de poster merci à toi pour le coup de main.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. preg_replace avec $1 ne marche pas
    Par polpaulin dans le forum Langage
    Réponses: 4
    Dernier message: 09/05/2012, 12h04
  2. 'SHOW TABLES' marche pas sous postgresql !?
    Par fet dans le forum PostgreSQL
    Réponses: 4
    Dernier message: 13/05/2004, 09h28
  3. Réponses: 9
    Dernier message: 07/05/2003, 12h57
  4. [GifDecoder] marche pas dans applet avec IE
    Par formentor dans le forum Applets
    Réponses: 2
    Dernier message: 06/05/2003, 10h43
  5. Sysdate qui marche pas ??
    Par StouffR dans le forum Langage SQL
    Réponses: 4
    Dernier message: 28/08/2002, 13h23

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo