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 :

problème avec preg_match_all [RegEx]


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de renaudjuif
    Inscrit en
    Avril 2006
    Messages
    325
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 325
    Par défaut problème avec preg_match_all
    Bonjour à tous,
    J'ai un vrai souci avec les expressions régulières...
    je veux isoler tout ce qui est comme ça dans une chaine :"{(.*)}"
    voilà mon code :

    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
    18
    19
    20
    21
    22
     
    $chaine="
          <TABLE> 
          	<tr>
          		<td colspan='3'>
    		        <IMG title='image1' src='{constant:IMG_1}'>
    		        <IMG title='image2' src='{constant:IMG_2}'>
    		        <IMG title='image3' src='{constant:IMG_3}'>
    		        <IMG title='image4' src='{constant:IMG_4}'>
          		</td></tr>
            <TR>
              <TD>
                <A onMouseOver=\"document.images['a'].src='{constant:IMG_5}';\" onMouseOut=\"document.images['a'].src='{constant:IMG_6}';\"><IMG src='{constant:IMG_6}'></A></TD>
              </TD>
              <TD>
                <A onMouseOver=\"document.images['b'].src='{constant:IMG_7}';\" onMouseOut=\"document.images['b'].src='{constant:IMG_8}';\"><IMG src='{constant:IMG_7}'></A></TD>
              </TR>
            </TABLE>
     ";       
            preg_match_all("#{constant:(.*)}#",$chaine,$tableau_ereg);
     
            print_r($tableau_ereg[0]);
    et ce que j'obtiens :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    Array
    (
        [0] => {constant:IMG_1}
        [1] => {constant:IMG_2}
        [2] => {constant:IMG_3}
        [3] => {constant:IMG_4}
        [4] => {constant:IMG_5}';" onMouseOut="document.images['a'].src='{constant:IMG_6}';"><IMG src='{constant:IMG_6}
        [5] => {constant:IMG_7}';" onMouseOut="document.images['b'].src='{constant:IMG_8}';"><IMG src='{constant:IMG_7}
    )
    Vous avez sans doute compris, je voudrais obtenir ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    Array
    (
        [0] => {constant:IMG_1}
        [1] => {constant:IMG_2}
        [2] => {constant:IMG_3}
        [3] => {constant:IMG_4}
        [4] => {constant:IMG_5}
        [5] => {constant:IMG_6}
        [6] => {constant:IMG_6}
        [7] => {constant:IMG_7}
        [8] => {constant:IMG_8}
        [9] => {constant:IMG_7}
    )
    Il y a un souci dans mon expression régulière, il ne s'arrête pas au 1er "}" trouvé, mais apparemment au dernier de la ligne...
    Et je ne vois pas du tout comment modifier mon expression... Vous avez une idée ?

    Merci.

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    78
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 78
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    preg_match_all("#{constant:(.*)}#isU",$chaine,$tableau_ereg);
    j'obtiens bien ce que tu veux :
    Array
    (
    [0] => Array
    (
    [0] => {constant:IMG_1}
    [1] => {constant:IMG_2}
    [2] => {constant:IMG_3}
    [3] => {constant:IMG_4}
    [4] => {constant:IMG_5}
    [5] => {constant:IMG_6}
    [6] => {constant:IMG_6}
    [7] => {constant:IMG_7}
    [8] => {constant:IMG_8}
    [9] => {constant:IMG_7}
    )

    [1] => Array
    (
    [0] => IMG_1
    [1] => IMG_2
    [2] => IMG_3
    [3] => IMG_4
    [4] => IMG_5
    [5] => IMG_6
    [6] => IMG_6
    [7] => IMG_7
    [8] => IMG_8
    [9] => IMG_7
    )

    )

  3. #3
    Membre éclairé Avatar de renaudjuif
    Inscrit en
    Avril 2006
    Messages
    325
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 325
    Par défaut
    Merci pour ta réponse, ça marche nickel
    J'ai rien trouvé sur isU...
    Pour ma culture générale, ça veut dire quoi isU ? la première occurence trouvée ?

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    78
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 78
    Par défaut
    de rien
    pour le isU :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Vous avez déjà vu le code pour [b], et c'est en effet presque le bon. Il y a un problème toutefois : il manque des options. Pour que ça marche, on va avoir besoin d'utiliser 3 options :
    
        * i : pour accepter les majuscules comme les minuscules ([B] et [b])
        * s : pour que le "point" fonctionne aussi pour les retours à la ligne (pour que le texte puisse être en gras sur plusieurs lignes)
        * U : le U majuscule est une option que vous ne connaissez pas, qui signifie "Ungreedy" ("pas gourmand"). Je vous passe les explications un peu complexes sur son fonctionnement, mais sachez que, grosso modo, ça ne marcherait pas correctement s'il y avait plusieurs  dans votre texte. Exemple :
          "Ce texte est important, il faut me comprendre !"
          ... sans l'option Ungreedy, la Regex aurait voulu mettre en gras tout ce qu'il y a entre le premier  et le dernier  (c'est-à-dire "important, il faut me comprendre";).
          En utilisant l'option "U", la Regex s'arrêtera au premier , et c'est ce qu'on veut

  5. #5
    Membre éclairé Avatar de renaudjuif
    Inscrit en
    Avril 2006
    Messages
    325
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 325
    Par défaut
    OK, donc tout est dans le U
    Merci pour test éclaircissements.
    Je mets le flag résolu.

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

Discussions similaires

  1. [RegEx] probléme avec preg_match_all
    Par zaiim dans le forum Langage
    Réponses: 3
    Dernier message: 22/04/2013, 16h46
  2. Réponses: 5
    Dernier message: 01/07/2011, 16h44
  3. Problème avec le type 'Corba::Any_out'
    Par Steven dans le forum CORBA
    Réponses: 2
    Dernier message: 14/07/2002, 18h48
  4. Problème avec la mémoire virtuelle
    Par Anonymous dans le forum CORBA
    Réponses: 13
    Dernier message: 16/04/2002, 16h10

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