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: plantage étrange avec l'option 's' sur longue chaine [RegEx]


Sujet :

Langage PHP

  1. #21
    Membre émérite
    Avatar de Eric2a
    Homme Profil pro
    Technicien
    Inscrit en
    Septembre 2005
    Messages
    1 225
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Corse (Corse)

    Informations professionnelles :
    Activité : Technicien

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 225
    Points : 2 411
    Points
    2 411
    Par défaut
    Re,
    Citation Envoyé par eyquem
    Pourquoi l’ajout de ? permet d’obtenir le bon résultat ?
    Je pense que la réponse se trouve dans ton explication remarquable sur le processus de recherche...
    Citation Envoyé par eyquem
    Toute RE un tant soit peu charpentée peut être considérée comme composée de REs élémentaires [...]
    Le moteur de regex examine les REs élémentaires de façon séquentielle tant que ça marche ainsi, mais dès qu’il le faut à cause d’une perte du matching, il se met à examiner toutes les possibilités offertes, en procèdant par des essais-erreurs dans l’arbre des REs constitutives de la RE globale, en reculant éventuellement, aprés avoir rencontré une impasse au bout de l’examen de plusieurs REs élémentaires consécutives, pour reprendre sa recherche à partir d’une position de la chaîne déjà passée et repartir dans une autre voie logique.
    Il s’acharne ainsi jusqu’à ce qu’il trouve une solution convenable aux yeux de la regex qu’il est chargé de respecter (la première solution trouvée suffit) ou alors qu’il ait épuisé toutes les possibilités, auquel cas il y a échec du matching global
    Je dirais que l'ajout de ? permet au moteur de savoir s'arrêter au premier élément trouvé. Ce dernier lui servant de "support" sur lequel s'appuyer, lui évitant ainsi de "lacher prise".
    Car si on le laisse aller à sa gourmandise, il s'en "éloigne trop" et l'effet indésirable est :
    1. la prise en compte de trop d'éléments car dans ces "va-et-vient", il aurait trouvé un nouveau support.
    2. l'échec du matching global.

    Citation Envoyé par stealth35
    et en rajoutant l'option u ?
    L'option U (PCRE_UNGREEDY) en fait...

    Perso, je n'ai jamais testé avec cette option. Je me dit que si une expression complète fonctionne en mode "gourmand" activé c'est qu'elle est "portable" et bien été "pensée".
    Ceci dit, je pense qu'en effet le cas serait résolu sans un seul ? avec cette option.

  2. #22
    Membre extrêmement actif
    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
    Points : 1 658
    Points
    1 658
    Par défaut
    Pourquoi l’ajout de ? permet d’obtenir le bon résultat ?

    (...)

    Je dirais que l'ajout de ? permet au moteur de savoir s'arrêter au premier élément trouvé.
    (...)
    si on le laisse aller à sa gourmandise, il s'en "éloigne trop"
    Certes , certes, c’est bien ainsi que je le comprends.
    En fait ma question est mal posée.

    L’idée derrière ma question est en fait:
    quand l’absence de ? ne stoppe pas le moteur de regex, il va “plus loin“, jusqu’à rencontrer quelque chose qui fait échouer le matching. Pourquoi ? donne le bon comportement, c’est en fait demander qu’est ce qu’il permet d’éviter.

    Je ne crois pas beaucoup à une dépendance du comportement en fonction de la longueur de texte après ce que la RE est censée matcher. Il doit y avoir autre chose, liée à une fin de ligne et à un ] qui se balade quelque part loin dans le texte analysé... j’ai comme l’impression que ce sont les manipulations un peu désordonnées de Florimond qui collent des textes variables selon les endroits de code...

    J’aimerais bien comprendre le twist précisément.

  3. #23
    Expert éminent sénior

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Points : 10 727
    Points
    10 727
    Par défaut
    Citation Envoyé par Eric2a Voir le message
    L'option U (PCRE_UNGREEDY) en fait...
    non non u minuscule, prise en charge de l'utf-8 (dans \w par exemple)

+ Répondre à la discussion
Cette discussion est résolue.
Page 2 sur 2 PremièrePremière 12

Discussions similaires

  1. Soucis avec l'option "Bridged" sur VMWARE
    Par Jovan dans le forum VMware
    Réponses: 1
    Dernier message: 10/02/2015, 16h50
  2. Recherche RPG avec option coopération sur PS3
    Par clairetj dans le forum Consoles
    Réponses: 13
    Dernier message: 08/07/2014, 09h35
  3. Réponses: 14
    Dernier message: 21/09/2012, 15h05
  4. [WD10] plantage appli avec vista sur impression Etat
    Par mnssylvain dans le forum WinDev
    Réponses: 3
    Dernier message: 27/11/2008, 20h02
  5. Réponses: 3
    Dernier message: 04/11/2007, 20h55

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