PHP|Débutant :: Forums

Advertisement

Besoin d'aide ? N'hésitez pas, mais respectez les règles

Vous n'êtes pas identifié(e).

#1 17-06-2014 22:26:55

Maljuna Kris
Infantimigulo
Lieu : Douarnenez 29100 Breizh Izel
Inscription : 08-05-2009
Messages : 2 453
Site Web

[Résolu]une expression régulière est-elle possible ?

Saluton,

J'ai l'array suivant

$leçon=array(1=>array('argot'=>'Mimile, tu radines (1)?',
                      'prononcer'=>'mimil tu radin\'',
                      'français'=>'Émile, venez-vous ?',
                      'notes'=>array(1=>"<b>(1) Tu radines ?</b>  Dans les phrases interrrogatives, l'inversion du sujet et du verbe, qui est la règle en français, n'est pratiquement jamais employée dans la langue populaire ; on ne dit pas &laquo; viens-tu ? &raquo;, mais <b>&laquo; tu viens ? &raquo;</b> ; la seule chose qui la distingue alors de la phrase affirmative correspondante est l'élévation de la voix sur la dernière ou sur les dernières syllabes. Notons que <b>radiner</b> peut être employé aussi sous la forme pronominale : <b> tu te radines ?</b>")
                      ),
             2=>array('argot'=>'(... Mimile y(2) la ferme) (3)',
                      'prononcer'=>'Mimililafèrm\'',
                      'français'=>'(Émile observe le silence)',
                      'notes'=>array(2=>'<b>(2) Mimile y la ferme </b>: dans la phrase populaire le sujet constitué par un substantitf est très souvent, mais pas toujours, renforcé par un pronom (<em>ici : il, prononcé <b>i</b> et écrit selon l\'usage <b>y</b></em>).',
                                     3=>'<b>(3) Y la ferme</b> (<em>sous-entendu <b>sa gueule</b></em>) : il se tait. <b>Ferme-la</b> (<em> ou <b> la ferme !</b>, ou <b>ferme ta gueule !</b></em>) sont les façons les plus courantes dans le peuple de traduire &lquo; Tais-toi ! &raquo; L\'argotier dira plutôt <b>Écrase !</b> (<em>qui contient une idée de menace</em>).')
                      ),

en fait je ne vous en ai mis que deux items. Je le parcours avec ce script

<?php
    foreach($leçon as $key=>$ligne){
        printf("<tr><td>%d %s</td><td><input type=\"button\" value=\"%s\" onClick=\"\"/></td>",
                $key,
               preg_replace('`(([^>]+))`', '<span onmouseover="montre(l'.$key.'_$1);" onmouseout="cachee(l'.$key.'_$1);">$1</span>',$ligne['argot']),
                $ligne['prononcer']                
                );
        printf("<td><input type=\"button\" value=\"voir français classique\" onClick=\"this.value='%s';\"/></td><tr>\n",
                addslashes($ligne['français'])
                );
        if(isset($ligne['notes'])){
            foreach($ligne['notes'] As $note=>$item){
                printf("<tr class=\"notes\" id=\"l%d_%d\"><td colspan=\"3\">%s</td></tr>\n",
                $key,
                $note,
                $item
                );
                }
            }
         }          
?>

Ne vous occupez pas du Onclick("") pour la prononciation, ce n'est pas le problème ici.

Je voudrais obtenir ceci

<tr><td>1 <span onmouseover="montre(l1_1);" onmouseout="cachee(l1_1;">Mimile, tu radines (1)?</span></td><td><input type="button" value="mimil tu radin'" onClick=""/></td><td><input type="button" value="voir français classique" onClick="this.value='Émile, venez-vous ?';"/></td><tr>
<tr class="notes" id="l1_1"><td colspan="3"><b>(1) Tu radines ?</b>  Dans les phrases interrrogatives, l'inversion du sujet et du verbe, qui est la règle en français, n'est pratiquement jamais employée dans la langue populaire ; on ne dit pas &laquo; viens-tu ? &raquo;, mais <b>&laquo; tu viens ? &raquo;</b> ; la seule chose qui la distingue alors de la phrase affirmative correspondante est l'élévation de la voix sur la dernière ou sur les dernières syllabes. Notons que <b>radiner</b> peut être employé aussi sous la forme pronominale : <b> tu te radines ?</b></td></tr>
<tr><td>2 (... Mimile y<span onmouseover="montre(l2_2);" onmouseout="cachee(l2_2);">(2)</span> la ferme) <span onmouseover="montre(l2_3);" onmouseout="cachee(l2_3);">(3)</span></td><td><input type="button" value="Mimililafèrm'" onClick=""/></td><td><input type="button" value="voir français classique" onClick="this.value='(Émile observe le silence)';"/></td><tr>
<tr class="notes" id="l2_2"><td colspan="3"><b>(2) Mimile y la ferme </b>: dans la phrase populaire le sujet constitué par un substantitf est très souvent, mais pas toujours, renforcé par un pronom (<em>ici : il, prononcé <b>i</b> et écrit selon l'usage <b>y</b></em>).</td></tr>
<tr class="notes" id="l2_3"><td colspan="3"><b>(3) Y la ferme</b> (<em>sous-entendu <b>sa gueule</b></em>) : il se tait. <b>Ferme-la</b> (<em> ou <b> la ferme !</b>, ou <b>ferme ta gueule !</b></em>) sont les façons les plus courantes dans le peuple de traduire &lquo; Tais-toi ! &raquo; L'argotier dira plutôt <b>Écrase !</b> (<em>qui contient une idée de menace</em>).</td></tr>
 

Mais, bien entendu, ce n'est pas ce que j'obtiens

<tr><td>1 <span onmouseover="montre(l1_Mimile, tu radines (1)?);" onmouseout="cachee(l1_Mimile, tu radines (1)?);">Mimile, tu radines (1)?</span></td><td><input type="button" value="mimil tu radin'" onClick=""/></td><td><input type="button" value="voir français classique" onClick="this.value='Émile, venez-vous ?';"/></td><tr>
<tr class="notes" id="l1_1"><td colspan="3"><b>(1) Tu radines ?</b>  Dans les phrases interrrogatives, l'inversion du sujet et du verbe, qui est la règle en français, n'est pratiquement jamais employée dans la langue populaire ; on ne dit pas &laquo; viens-tu ? &raquo;, mais <b>&laquo; tu viens ? &raquo;</b> ; la seule chose qui la distingue alors de la phrase affirmative correspondante est l'élévation de la voix sur la dernière ou sur les dernières syllabes. Notons que <b>radiner</b> peut être employé aussi sous la forme pronominale : <b> tu te radines ?</b></td></tr>
<tr><td>2 <span onmouseover="montre(l2_(... Mimile y(2) la ferme) (3));" onmouseout="cachee(l2_(... Mimile y(2) la ferme) (3));">(... Mimile y(2) la ferme) (3)</span></td><td><input type="button" value="Mimililafèrm'" onClick=""/></td><td><input type="button" value="voir français classique" onClick="this.value='(Émile observe le silence)';"/></td><tr>
<tr class="notes" id="l2_2"><td colspan="3"><b>(2) Mimile y la ferme </b>: dans la phrase populaire le sujet constitué par un substantitf est très souvent, mais pas toujours, renforcé par un pronom (<em>ici : il, prononcé <b>i</b> et écrit selon l'usage <b>y</b></em>).</td></tr>
<tr class="notes" id="l2_3"><td colspan="3"><b>(3) Y la ferme</b> (<em>sous-entendu <b>sa gueule</b></em>) : il se tait. <b>Ferme-la</b> (<em> ou <b> la ferme !</b>, ou <b>ferme ta gueule !</b></em>) sont les façons les plus courantes dans le peuple de traduire &lquo; Tais-toi ! &raquo; L'argotier dira plutôt <b>Écrase !</b> (<em>qui contient une idée de menace</em>).</td></tr>

Je n'ai jamais été très fort pour les regexp et là je crois que je m'attaque à beaucoup trop gros pour moi.
Quelqu'un a-t-il une proposition à substituer à

 preg_replace('`(([^>]+))`', '<span onmouseover="montre(l'.$key.'_$1);" onmouseout="cachee(l'.$key.'_$1);">$1</span>',$ligne['argot'])

Je précise que seuls m'intéressent les parenthèses qui enferment un chiffre de 1 à 9, car il peut y avoir des parenthèses enfermant des textes plus longs dans les $ligne['argot'].

S'il n'y avait pas de solution je modifierais les items 'argot' dans l'array, mais je préférerais laisser PHP le faire à ma place car il y a quand même 1400 items (14 lignes x 100 leçons), et d'autre part l'argument passé aux fonctions javascript montre() et cache() est un id de <tr> généré par PHP dans la boucle.

Merci de votre intérêt.


Gloire à qui n'ayant pas d'idéal sacro-saint,
Se borne à ne pas trop emmerder ses voisins. G. Brassens Don Juan 1976.
Avĉjo MoKo kantas
La chaîne YouTube MoKo Papy

Hors ligne

#2 18-06-2014 06:52:57

Maljuna Kris
Infantimigulo
Lieu : Douarnenez 29100 Breizh Izel
Inscription : 08-05-2009
Messages : 2 453
Site Web

Re : [Résolu]une expression régulière est-elle possible ?

Saluton,

En attendant une solution avec preg_replace j'ai modifié mon script comme ceci:

<?php
    foreach($leçon as $key=>$ligne){
        printf("<tr><td>%d %s</td><td><input type=\"button\" value=\"%s\" onClick=\"\"/></td>",
                $key,
                fillwithspan($ligne['argot'],$key),
                $ligne['prononcer']                
                );
        printf("<td><input type=\"button\" value=\"voir français classique\" onClick=\"this.value='%s';\"/></td><tr>\n",
                addslashes($ligne['français'])
                );
        if(isset($ligne['notes'])){
            foreach($ligne['notes'] As $note=>$item){
                printf("<tr class=\"notes\" id=\"l%d_%d\"><td colspan=\"3\">%s</td></tr>\n",
                $key,
                $note,
                $item
                );
                }
            }
         }          
function fillwithspan($argot,$trid){
    if(strpos($argot,'(1)')!==false){
        $argot=str_replace('(1)','<span class="renvoi" onMouseover="montre(l'.$trid.'_1);" onMouseout="cache(l'.$trid.'_1);">(1)</span>',$argot);
        }
    if(strpos($argot,'(2)')!==false){
        $argot=str_replace('(2)','<span class="renvoi" onMouseover="montre(l'.$trid.'_2);" onMouseout="cache(l'.$trid.'_2);">(2)</span>',$argot);
        }
    if(strpos($argot,'(3)')!==false){
        $argot=str_replace('(3)','<span class="renvoi" onMouseover="montre(l'.$trid.'_3);" onMouseout="cache(l'.$trid.'_3);">(3)</span>',$argot);
        }
    if(strpos($argot,'(4)')!==false){
        $argot=str_replace('(4)','<span class="renvoi" onMouseover="montre(l'.$trid.'_4);" onMouseout="cache(l'.$trid.'_4);">(4)</span>',$argot);
        }
    if(strpos($argot,'(5)')!==false){
        $argot=str_replace('(5)','<span class="renvoi" onMouseover="montre(l'.$trid.'_5);" onMouseout="cache(l'.$trid.'_5);">(5)</span>',$argot);
        }
    if(strpos($argot,'(6)')!==false){
        $argot=str_replace('(6)','<span class="renvoi" onMouseover="montre(l'.$trid.'_6);" onMouseout="cache(l'.$trid.'_6);">(6)</span>',$argot);
        }
    if(strpos($argot,'(7)')!==false){
        $argot=str_replace('(7)','<span class="renvoi" onMouseover="montre(l'.$trid.'_7);" onMouseout="cache(l'.$trid.'_7);">(7)</span>',$argot);
        }
    if(strpos($argot,'(8)')!==false){
        $argot=str_replace('(8)','<span class="renvoi" onMouseover="montre(l'.$trid.'_8);" onMouseout="cache(l'.$trid.'_8);">(8)</span>',$argot);
        }
    if(strpos($argot,'(9)')!==false){
        $argot=str_replace('(9)','<span class="renvoi" onMouseover="montre(l'.$trid.'_9);" onMouseout="cache(l'.$trid.'_9);">(9)</span>',$argot);
        }
    return $argot;
    }
?>

et j'obtiens bien ce que je voulais:

<tr><td>1 Mimile, tu radines <span class="renvoi" onMouseover="montre(l1_1);" onMouseout="cache(l1_1);">(1)</span>?</td><td><input type="button" value="mimil tu radin'" onClick=""/></td><td><input type="button" value="voir français classique" onClick="this.value='Émile, venez-vous ?';"/></td><tr>
<tr class="notes" id="l1_1"><td colspan="3"><b>(1) Tu radines ?</b>  Dans les phrases interrrogatives, l'inversion du sujet et du verbe, qui est la règle en français, n'est pratiquement jamais employée dans la langue populaire ; on ne dit pas &laquo; viens-tu ? &raquo;, mais <b>&laquo; tu viens ? &raquo;</b> ; la seule chose qui la distingue alors de la phrase affirmative correspondante est l'élévation de la voix sur la dernière ou sur les dernières syllabes. Notons que <b>radiner</b> peut être employé aussi sous la forme pronominale : <b> tu te radines ?</b></td></tr>
<tr><td>2 (... Mimile y<span class="renvoi" onMouseover="montre(l2_2);" onMouseout="cache(l2_2);">(2)</span> la ferme) <span class="renvoi" onMouseover="montre(l2_3);" onMouseout="cache(l2_3);">(3)</span></td><td><input type="button" value="Mimililafèrm'" onClick=""/></td><td><input type="button" value="voir français classique" onClick="this.value='(Émile observe le silence)';"/></td><tr>
<tr class="notes" id="l2_2"><td colspan="3"><b>(2) Mimile y la ferme </b>: dans la phrase populaire le sujet constitué par un substantitf est très souvent, mais pas toujours, renforcé par un pronom (<em>ici : il, prononcé <b>i</b> et écrit selon l'usage <b>y</b></em>).</td></tr>
<tr class="notes" id="l2_3"><td colspan="3"><b>(3) Y la ferme</b> (<em>sous-entendu <b>sa gueule</b></em>) : il se tait. <b>Ferme-la</b> (<em> ou <b> la ferme !</b>, ou <b>ferme ta gueule !</b></em>) sont les façons les plus courantes dans le peuple de traduire &lquo; Tais-toi ! &raquo; L'argotier dira plutôt <b>Écrase !</b> (<em>qui contient une idée de menace</em>).</td></tr>

Mais j'imagine qu'une astuce en regexp serait plus rapide (quoique).


Gloire à qui n'ayant pas d'idéal sacro-saint,
Se borne à ne pas trop emmerder ses voisins. G. Brassens Don Juan 1976.
Avĉjo MoKo kantas
La chaîne YouTube MoKo Papy

Hors ligne

#3 19-06-2014 00:30:24

Maljuna Kris
Infantimigulo
Lieu : Douarnenez 29100 Breizh Izel
Inscription : 08-05-2009
Messages : 2 453
Site Web

Re : [Résolu]une expression régulière est-elle possible ?

Saluton,

Ça se complique, je viens de tomber sur un cas où il y a une notre n°(10)

J'ai simplement ajouté cette rustine.

        $argot=str_replace('(10)','<span class="renvoi" onMouseover="montre(\'l'.$trid.'_10\');" onMouseout="cache(\'l'.$trid.'_10\');">(10)</span>',$argot);
        }

, mais cela démontre bien qu'une regexp serait plus universelle.


Gloire à qui n'ayant pas d'idéal sacro-saint,
Se borne à ne pas trop emmerder ses voisins. G. Brassens Don Juan 1976.
Avĉjo MoKo kantas
La chaîne YouTube MoKo Papy

Hors ligne

#4 05-07-2014 12:29:55

Jc
Membre
Lieu : Zillisheim - Alsace
Inscription : 15-04-2010
Messages : 1 629
Site Web

Re : [Résolu]une expression régulière est-elle possible ?

Bonjour,

Excuse moi MK, mais il y a une chose que je n'ai pas compris dans ta démarche.
En général, le but d'une regexp quand il n'est pas de valider le contenu d'une chaîne, il est d'extraire des données, que l'on pourrait appeler "données sources", au sein d'une phrase (au sens générique ici) qui constitue alors les données brutes.
A partir de là, sauf erreur de ma part, tu disposes déjà des données sources qui sont représentées par ton tableau associatif $leçon.
Je pense que ton problème viens du fait que ton algo de mise en forme de données n'est pas pertinent dans le sens où il ne va pas au bout de ton besoin final de mise en forme.

++

Dernière modification par Jc (05-07-2014 12:30:30)


POO PHP+Ajax en MVC avec PDO et Bases de données épaisses  : What else?

Hors ligne

#5 05-07-2014 17:30:34

Maljuna Kris
Infantimigulo
Lieu : Douarnenez 29100 Breizh Izel
Inscription : 08-05-2009
Messages : 2 453
Site Web

Re : [Résolu]une expression régulière est-elle possible ?

Saluton,
Mon besoin de mise en forme finale est qu'au survol d'un numéro de note, par exemple (1) la note correspondante qui est par nature de type display:none devienne visible.
Ce que j'obtiens, par exemple sur cette page : http://www.avcxjo-moko-kantas.fr/LMAM/i … p?page=001Pour cela il faut que je rende réactive la zone (1) de l'item d'argot.
Comme la page est construite par PHP (il y aura in fine 100 pages de structure identique) les identifiants des lignes sont générés au fil de l'eau.

Et preg_replace est bien une fonction regex de substitution, donc je en vois aps ce qu'il y a d'incohérent à vouloir l'utiliser dans ce contexte.


Gloire à qui n'ayant pas d'idéal sacro-saint,
Se borne à ne pas trop emmerder ses voisins. G. Brassens Don Juan 1976.
Avĉjo MoKo kantas
La chaîne YouTube MoKo Papy

Hors ligne

#6 06-07-2014 02:02:46

Jc
Membre
Lieu : Zillisheim - Alsace
Inscription : 15-04-2010
Messages : 1 629
Site Web

Re : [Résolu]une expression régulière est-elle possible ?

Si tu veux garder le travail effectué je pense qu'il te suffit de remplacer $ligne['argot']
dans


 preg_replace('`(([^>]+))`', '<span onmouseover="montre(l'.$key.'_$1);" onmouseout="cachee(l'.$key.'_$1);">$1</span>',$ligne['argot'])
 

par la capture du chiffre entre parenthèses qu'il contient lorsqu'il est présent avec un preg_match. (Faudra faire un test dessus avant d'appliquer le preg_replace)

Le pattern pour cela c'est un truc du genre


$pattern='#\(([0-9]+)\)#';
$capture=preg_match($pattern,$ligne['argot']);
 

POO PHP+Ajax en MVC avec PDO et Bases de données épaisses  : What else?

Hors ligne

#7 06-07-2014 06:12:41

Maljuna Kris
Infantimigulo
Lieu : Douarnenez 29100 Breizh Izel
Inscription : 08-05-2009
Messages : 2 453
Site Web

Re : [Résolu]une expression régulière est-elle possible ?

Merci Jc,

Mais je crains de ne pas tout comprendre (comme souvent) hmm

Le but est d'éventuellement remplacer dans $ligne['argot'] toute occurrence d'un nombre entre parenthèses par son équivalent encapsulé d'un <span> et de ses méthodes onmouseover() et onmouseout() en leur passant la valeur du nombre comme argument des fonctions montre() et cache().

Or preg_replace() attend trois arguments  : le motif recherché, le texte de remplacement, la chaîne dans laquelle chercher et substituer.

Et c'est sur ce dernier point que je bute, j'ai deux pattern, un pour le preg_match et un pour le preg_replace, ça, d'accord.

Mais comment imbriquer le preg_match et le preg_replace ?


Gloire à qui n'ayant pas d'idéal sacro-saint,
Se borne à ne pas trop emmerder ses voisins. G. Brassens Don Juan 1976.
Avĉjo MoKo kantas
La chaîne YouTube MoKo Papy

Hors ligne

#8 10-07-2014 01:56:28

Jc
Membre
Lieu : Zillisheim - Alsace
Inscription : 15-04-2010
Messages : 1 629
Site Web

Re : [Résolu]une expression régulière est-elle possible ?

Je ne t'oublie pas MK, j'ai juste la tête sous l'eau. Je reviens vers toi au plus tôt.
En attendant fait un test en remplaçant ton pattern par le mien, voir ce que ça donne.

Dernière modification par Jc (10-07-2014 02:00:31)


POO PHP+Ajax en MVC avec PDO et Bases de données épaisses  : What else?

Hors ligne

#9 10-07-2014 08:19:45

Maljuna Kris
Infantimigulo
Lieu : Douarnenez 29100 Breizh Izel
Inscription : 08-05-2009
Messages : 2 453
Site Web

Re : [Résolu]une expression régulière est-elle possible ?

Jc a écrit :

Je ne t'oublie pas MK, j'ai juste la tête sous l'eau. Je reviens vers toi au plus tôt.

En doutais-je ?

Jc a écrit :

En attendant fait un test en remplaçant ton pattern par le mien, voir ce que ça donne.

J'ai inséré au début du code de ma fonction

function fillwithspan($argot,$trid){
    $pattern='#\(([0-9]+)\)#';
    echo preg_match($pattern,'argot');

Et cela me retourne une jolie guirlande de 0 0 0 0 0 0

Doc PHP a écrit :

preg_match() retourne 1 si le pattern fourni correspond, 0 s'il ne correspond pas, ou FALSE si une erreur survient.

j'en conclus que ce pattern ne convient pas trop.


Gloire à qui n'ayant pas d'idéal sacro-saint,
Se borne à ne pas trop emmerder ses voisins. G. Brassens Don Juan 1976.
Avĉjo MoKo kantas
La chaîne YouTube MoKo Papy

Hors ligne

#10 11-07-2014 02:37:45

Jc
Membre
Lieu : Zillisheim - Alsace
Inscription : 15-04-2010
Messages : 1 629
Site Web

Re : [Résolu]une expression régulière est-elle possible ?

Bonjour,

J'ai inséré au début du code de ma fonction

function fillwithspan($argot,$trid){
    $pattern='#\(([0-9]+)\)#';
    echo preg_match($pattern,'argot');

Question n'aurais-tu pas oublié un $ quelque part? parce que là je ne vois pas ce qu'il y a d'anormal dans la réponse que tu obtiens.^^


POO PHP+Ajax en MVC avec PDO et Bases de données épaisses  : What else?

Hors ligne

#11 11-07-2014 06:13:07

Maljuna Kris
Infantimigulo
Lieu : Douarnenez 29100 Breizh Izel
Inscription : 08-05-2009
Messages : 2 453
Site Web

Re : [Résolu]une expression régulière est-elle possible ?

Evidemment  bien sûr (le boulet !!!) :

function fillwithspan($argot,$trid){
    $pattern='#\(([0-9]+)\)#';
    echo preg_match($pattern,$argot);

retourne, avec lecon0001.inc.php

fillwithspan($argot,$trid) a écrit :

1 1 1 0 0 1 0 0 0 0 1 0 0 0

Ce qui correspond bien au fait qu'il y ait des notes aux items 1, 2, 3, 6 et 11 et pas dans les autres. A ceci près que dans les items 2 et 11 il y a deux notes.

<?php
$leçon=array(1=>array('argot'=>'Mimile, tu radines (1)?',
                      'prononcer'=>'mimil tu radin\'',
                      'français'=>'Émile, venez-vous ?',
                      'notes'=>array(1=>"<b>(1) Tu radines ?</b>  Dans les phrases interrrogatives, l'inversion du sujet et du verbe, qui est la règle en français, n'est pratiquement jamais employée dans la langue populaire ; on ne dit pas &laquo; viens-tu ? &raquo;, mais <b>&laquo; tu viens ? &raquo;</b> ; la seule chose qui la distingue alors de la phrase affirmative correspondante est l'élévation de la voix sur la dernière ou sur les dernières syllabes. Notons que <b>radiner</b> peut être employé aussi sous la forme pronominale : <b> tu te radines ?</b>")
                      ),
             2=>array('argot'=>'(... Mimile y(2) la ferme)(3)',
                      'prononcer'=>'Mimililafèrm\'',
                      'français'=>'(Émile observe le silence)',
                      'notes'=>array(2=>'<b>(2) Mimile y la ferme </b>: dans la phrase populaire le sujet constitué par un substantitf est très souvent, mais pas toujours, renforcé par un pronom (<em>ici : il, prononcé <b>i</b> et écrit selon l\'usage <b>y</b></em>).',
                                     3=>'<b>(3) Y la ferme</b> (<em>sous-entendu <b>sa gueule</b></em>) : il se tait. <b>Ferme-la</b> (<em> ou <b> la ferme !</b>, ou <b>ferme ta gueule !</b></em>) sont les façons les plus courantes dans le peuple de traduire &lquo; Tais-toi ! &raquo; L\'argotier dira plutôt <b>Écrase !</b> (<em>qui contient une idée de menace</em>).')
                      ),
             3=>array('argot'=>'Tu viens-t-y(4), Mimile ?',
                      'prononcer'=>'tuvyiñti',
                      'français'=>'Venez-vous, Émile ?',
                      'notes'=>array(4=>'<b>(4)Tu viens-t-y ?</b> : l\interrogation est souvent marquée par une particule invariable analogue au <b>ne</b> latin et qui se prononce <b>ti</b> (<em>ou <b>i</b> quand la forme verbale se termine par un <b>t</b>) et que nous écrivons :<b> t-y</b> au <b>y</b>.</em> Exemple : <b>T\'entraves-t-y c\'que j\'te cause ?</b> : comprenez-vous ce que je vous dis ?')
                      ),
             4=>array('argot'=>'...(Mimile y moufte pas,',
                      'prononcer'=>'Mimilimouftëpa',
                      'français'=>'...(Émile fait comme si de rien n\'était,'
                      ),
             5=>array('argot'=>'Nanar y lui gueule dans l\'esgourde) :',
                      'prononcer'=>'Nanariluigoëldanslèsgourd\'',
                      'français'=>'Bernard lui crie à l\'oreille) :'
                      ),
             6=>array('argot'=>'Mimile, tu viens-t-y, oui ou merde ?(5)',
                      'prononcer'=>'Mimil, tuvyiñtihouihoumèrd\'',
                      'français'=>'Émile, venez-vous, oui ou non ?',
                      'notes'=>array(5=>'<b>(5) Oui ou merde ?</b>) : oui on non ? Ne pas en déduire que <b>merde</b> veut dire &laquo; non &raquo;. <b>Merde</b> n\'est pas seulement, en effet, &laquo; matière fécale de l\'homme et de certains animaux &raquo;, mais exclamation de mépris, d\'indignation, de refus, d\'impatience, de dépit, de douleur, etc., ou encore d\'étonnement, de surprise, d\'admiration. Exemple :  <b>Merde, les lardus.</b> Horreur, voici les policiers ! <b> Merde, c\'qu\'elle est belle !</b> Dieu comm elle est belle ! C\'est le maître mot de la langue française, le Mot, selon <b>Alfred Jarry</b>, qui a su lui donner ses lettres de noblesse (<em>et une de supplément au début d\'&laquo; Ubu-Roi &raquo; : <b>Merdre !</b></em>). Il peut avoir toutes les forces, toutes les efficacités, tous les sens. <b>Oui ou merde</b>, ici, marque mieux que oui ou non l\'impatience de bernard ; sons sens exact est : &laquo; Dis au besoin une injure, mais dis quelque chose !&raquo;')
                      ),
             7=>array('argot'=>'...(Mimile y l\'ouvre toujours pas,',
                      'prononcer'=>'Mimililouv\'toujourpa',
                      'français'=>'...(Émile continue à se taire,'                      
                      ),
             8=>array('argot'=>'y ligote pépère son canard.',
                      'prononcer'=>'iligot\' pépèr\'soñcanar',
                      'français'=>'il lit tranquillement son journal'
                      ),
             9=>array('argot'=>'Nanar l\'argougne par les endosses) :',
                      'prononcer'=>'nanarlargougn\'parlèzañdôss\'',
                      'français'=>'Bernard le saisit aux épaules) :',
                      ),
             10=>array('argot'=>'T\'es sourdingue ou tu te fous de ma gueule',
                      'prononcer'=>'tèsourdiñgh\'houtut\'foud\'magoël',
                      'français'=>'Êtes-vous sourd, ou vous moquez-vous de moi ?',
                      'image'=>'/img/001;jpg'
                      ),
             11=>array('argot'=>'Fais pas chier(6), merde, tu me casses les burnes(7).',
                      'prononcer'=>'fèpachié, mèrd\', tum\'kass\'lèburn\'',
                      'français'=>'Ne (me) traccassez pas, que diable ! vous m\'importunez !',
                      'notes'=>array(6=>'<b>(6) Fais pas chier !</b> (<em>noter la suppression du complément <b>me</b>, qui reste sous-entendu</em>)  : ne me dérange pas ! <b>Se faire chier</b> : s\'ennuyer. ',
                                      7=>'<b>mot à mot</b> : vous me brisez les testicules')
                      ),
             12=>array('argot'=>'Tu viens pas t\'en jeter un petit ?',
                      'prononcer'=>'tuvyiñtañch\'té huñ p\'ti',
                      'français'=>'Ne venez-vous pas boire un verre avec moi ?'
                      ),
             13=>array('argot'=>'Tu pouvais pas le dire d\'entrée,',
                      'prononcer'=>'tupouvèpal\'dirdañtré',
                      'français'=>'Ne pouviez-vous pas le dire tout de suite,'
                      ),
             14=>array('argot'=>'que tu voulais carmer l\'apéro ?',
                      'prononcer'=>'ktuvoulèkarmélapéro',
                      'français'=>'que vous désiriez (m\')offrir une boisson apéritive ?'
                      )
             );

Gloire à qui n'ayant pas d'idéal sacro-saint,
Se borne à ne pas trop emmerder ses voisins. G. Brassens Don Juan 1976.
Avĉjo MoKo kantas
La chaîne YouTube MoKo Papy

Hors ligne

#12 11-07-2014 22:37:44

Jc
Membre
Lieu : Zillisheim - Alsace
Inscription : 15-04-2010
Messages : 1 629
Site Web

Re : [Résolu]une expression régulière est-elle possible ?

Ce qui correspond bien au fait qu'il y ait des notes aux items 1, 2, 3, 6 et 11 et pas dans les autres. A ceci près que dans les items 2 et 11 il y a deux notes.

C'est normal tu lui demandes s'il en trouve au moins 1. Normalement le preg_replace() devrait remplacer toutes les occurrences s'il y en a, au même titre qu'un preg_match_all() te les retourneras tous.


POO PHP+Ajax en MVC avec PDO et Bases de données épaisses  : What else?

Hors ligne

#13 17-07-2014 10:00:55

Maljuna Kris
Infantimigulo
Lieu : Douarnenez 29100 Breizh Izel
Inscription : 08-05-2009
Messages : 2 453
Site Web

Re : [Résolu]une expression régulière est-elle possible ?

Bon j'essaye d'avancer sur cette affaire. Je teste pour voir sir preg_match me trouve toutes les 'notes', notamment quand il y en a plusieurs dans une même ligne.
J'ai donc modifié le script comme suit :

function fillwithspan($argot,$trid){
   $pattern='#\(([0-9]+)\)#';
   preg_match($pattern,$argot,$results,PREG_OFFSET_CAPTURE);
   if (count($results)>0) { print_r($results);}

Et j'obtiens ces données

Array
(
    [0] => Array
        (
            [0] => (1)
            [1] => 19
        )

    [1] => Array
        (
            [0] => 1
            [1] => 20
        )
)
Array
(
    [0] => Array
        (
            [0] => (2)
            [1] => 13
        )
)
    [1] => Array
        (
            [0] => 2
            [1] => 14
        )
)
Array
(
    [0] => Array
        (
            [0] => (4)
            [1] => 12
        )

    [1] => Array
        (
            [0] => 4
            [1] => 13
        )
)
Array
(
    [0] => Array
        (
            [0] => (5)
            [1] => 36
        )

    [1] => Array
        (
            [0] => 5
            [1] => 37
        )
)
Array
(
    [0] => Array
        (
            [0] => (6)
            [1] => 14
        )

    [1] => Array
        (
            [0] => 6
            [1] => 15
        )
)

Où l'on voit bien que lorsqu'il y a plusieurs 'notes' dans une ligne, seule la première est détectée.
Dans la leçon 1 la ligne 2 comporte les 'notes' (2) et (3) et la ligne 11 les notes (6) et (7).
Alors que la constante PREG_OFFSET_CAPTURE, devrait assurer la capture de toutes les correspondances.

Doc PHP de preg_match() a écrit :

    Le paramètre flags peut prendre l'une des valeurs suivantes :

    PREG_OFFSET_CAPTURE
        Si cette option est activée, toutes les sous-chaînes qui satisfont le masque seront aussi identifiées par leur offset. Notez que cela modifie la valeur de matches qui devient un tableau dont chaque élément est un tableau contenant la chaîne correspondant au masque à l'offset 0 ainsi que l'offset de la chaîne dans subject à l'offset 1.


Gloire à qui n'ayant pas d'idéal sacro-saint,
Se borne à ne pas trop emmerder ses voisins. G. Brassens Don Juan 1976.
Avĉjo MoKo kantas
La chaîne YouTube MoKo Papy

Hors ligne

#14 18-07-2014 12:50:58

Jc
Membre
Lieu : Zillisheim - Alsace
Inscription : 15-04-2010
Messages : 1 629
Site Web

Re : [Résolu]une expression régulière est-elle possible ?

Bonjour,

Je teste pour voir sir preg_match me trouve toutes les 'notes',...

Non Mk, comme je te l'ai dit avant, c'est un preg_match_all qui te les trouvera toutes.


POO PHP+Ajax en MVC avec PDO et Bases de données épaisses  : What else?

Hors ligne

#15 18-07-2014 13:01:39

Maljuna Kris
Infantimigulo
Lieu : Douarnenez 29100 Breizh Izel
Inscription : 08-05-2009
Messages : 2 453
Site Web

Re : [Résolu]une expression régulière est-elle possible ?

Ben, crénom ! qu'est-ce qui raconte dans la doc alors ?

C'est-y quoi ce flag PREG_OFFSET_CAPTURE ?

Si on ne peut plus se fier à la doc ...


Gloire à qui n'ayant pas d'idéal sacro-saint,
Se borne à ne pas trop emmerder ses voisins. G. Brassens Don Juan 1976.
Avĉjo MoKo kantas
La chaîne YouTube MoKo Papy

Hors ligne

#16 18-07-2014 13:09:59

Maljuna Kris
Infantimigulo
Lieu : Douarnenez 29100 Breizh Izel
Inscription : 08-05-2009
Messages : 2 453
Site Web

Re : [Résolu]une expression régulière est-elle possible ?

Bon, Ok, avec preg_match_all il me les trouve toutes.

Maintenant faut que je vois comment combiner ça avec preg_replace().

Ça me promet encore bien de l'amusement c't'affaire.


Gloire à qui n'ayant pas d'idéal sacro-saint,
Se borne à ne pas trop emmerder ses voisins. G. Brassens Don Juan 1976.
Avĉjo MoKo kantas
La chaîne YouTube MoKo Papy

Hors ligne

#17 18-07-2014 21:47:33

Jc
Membre
Lieu : Zillisheim - Alsace
Inscription : 15-04-2010
Messages : 1 629
Site Web

Re : [Résolu]une expression régulière est-elle possible ?

Tu n'es pas en forme mon bon MK^^
Comme je te l'ai expliqué, essaye mon pattern directement dans ton preg_replace il devrait se comporter comme le preg_match_all pour les remplacements.


POO PHP+Ajax en MVC avec PDO et Bases de données épaisses  : What else?

Hors ligne

#18 18-07-2014 22:22:59

Maljuna Kris
Infantimigulo
Lieu : Douarnenez 29100 Breizh Izel
Inscription : 08-05-2009
Messages : 2 453
Site Web

Re : [Résolu]une expression régulière est-elle possible ?

Bon alors j'ai remplacé tout ce fourbis

<?php
    foreach($leçon as $key=>$ligne){
        printf("<tr><td><b>%d-</b> %s</td><td><input type=\"button\" value=\"%s\" onClick=\"play('Al%d_%d');\"/></td>",
                $key,
                fillwithspan($ligne['argot'],$key),
                $ligne['prononcer'],
                intval($paĝo),
                $key              
                );


function fillwithspan($argot,$trid){
  if(strpos($argot,'(1)')!==false){
        $argot=str_replace('(1)','<span class="renvoi" onMouseover="montre(\'l'.$trid.'_1\');" onMouseout="cache(\'l'.$trid.'_1\');">(1)</span>',$argot);
        }
    if(strpos($argot,'(2)')!==false){
        $argot=str_replace('(2)','<span class="renvoi" onMouseover="montre(\'l'.$trid.'_2\');" onMouseout="cache(\'l'.$trid.'_2\');">(2)</span>',$argot);
        }
    if(strpos($argot,'(3)')!==false){
        $argot=str_replace('(3)','<span class="renvoi" onMouseover="montre(\'l'.$trid.'_3\');" onMouseout="cache(\'l'.$trid.'_3\');">(3)</span>',$argot);
        }
    if(strpos($argot,'(4)')!==false){
        $argot=str_replace('(4)','<span class="renvoi" onMouseover="montre(\'l'.$trid.'_4\');" onMouseout="cache(\'l'.$trid.'_4\');">(4)</span>',$argot);
        }
    if(strpos($argot,'(5)')!==false){
        $argot=str_replace('(5)','<span class="renvoi" onMouseover="montre(\'l'.$trid.'_5\');" onMouseout="cache(\'l'.$trid.'_5\');">(5)</span>',$argot);
        }
    if(strpos($argot,'(6)')!==false){
        $argot=str_replace('(6)','<span class="renvoi" onMouseover="montre(\'l'.$trid.'_6\');" onMouseout="cache(\'l'.$trid.'_6\');">(6)</span>',$argot);
        }
    if(strpos($argot,'(7)')!==false){
        $argot=str_replace('(7)','<span class="renvoi" onMouseover="montre(\'l'.$trid.'_7\');" onMouseout="cache(\'l'.$trid.'_7\');">(7)</span>',$argot);
        }
    if(strpos($argot,'(8)')!==false){
        $argot=str_replace('(8)','<span class="renvoi" onMouseover="montre(\'l'.$trid.'_8\');" onMouseout="cache(\'l'.$trid.'_8\');">(8)</span>',$argot);
        }
    if(strpos($argot,'(9)')!==false){
        $argot=str_replace('(9)','<span class="renvoi" onMouseover="montre(\'l'.$trid.'_9\');" onMouseout="cache(\'l'.$trid.'_9\');">(9)</span>',$argot);
        }
    if(strpos($argot,'(10)')!==false){
        $argot=str_replace('(10)','<span class="renvoi" onMouseover="montre(\'l'.$trid.'_10\');" onMouseout="cache(\'l'.$trid.'_10\');">(10)</span>',$argot);
        }
    if(strpos($argot,'(11)')!==false){
        $argot=str_replace('(11)','<span class="renvoi" onMouseover="montre(\'l'.$trid.'_11\');" onMouseout="cache(\'l'.$trid.'_11\');">(11)</span>',$argot);
        }
    return $argot;
    }

par

<?php
    foreach($leçon as $key=>$ligne){
        printf("<tr><td><b>%d-</b> %s</td><td><input type=\"button\" value=\"%s\" onClick=\"play('Al%d_%d');\"/></td>",
                $key,
                preg_replace('#\(([0-9]+)\)#', '<span class="renvoi" onmouseover="montre(\'l'.$key.'_$1\');" onmouseout="cache(\'l'.$key.'_$1\');">($1)</span>',$ligne['argot']),
                $ligne['prononcer'],
                intval($paĝo),
                $key              
                );

et, à ma grande surprise et satisfaction, j'obtiens le même résultat.
Je n'y comprends absolument rien, mais ça fonctionne impeccablement.

Merci à toi JC pour ta patience, promis dès que j'aurai retrouvé quelques neurones sains et un peu de temps, je chercherai à comprendre.


Gloire à qui n'ayant pas d'idéal sacro-saint,
Se borne à ne pas trop emmerder ses voisins. G. Brassens Don Juan 1976.
Avĉjo MoKo kantas
La chaîne YouTube MoKo Papy

Hors ligne

Pied de page des forums