Expressions régulières en php.

Expressions régulières en php. - PHP - Programmation

Marsh Posté le 13-03-2008 à 10:11:33    

Bonjour,
 
Mon problème est assez simple (enfin je pense), mais je n'ai pas réussi à trouver comment faire.
 
J'ai un tableau :  
 
<table>
    <tr>
        <td>Blabla 1</td>
        <td class="monBlabla2">Blabla 2</td>
        <td>Blabla 3</td>
    </tr>
</table>
 
 
J'aimerais, via les expressions régulières et la méthode ereg_replace remplacer la ligne (qui peut être sur plusieurs lignes dans le code) "<td class="monBlabla2">Blabla 2</td>" par rien.  
 
J'ai entre autres essayé ca :
 
$page = ereg_replace("<td class="monBlabla2"(^(td))</td>", "", $page);
 
 
Seulement, il me remplace mon td blabl2 et mon td blabla3 par rien. Comment faire en sorte pour qu'il ne prenne que le td de blabla2 ?
 
Merci d'avance.

Reply

Marsh Posté le 13-03-2008 à 10:11:33   

Reply

Marsh Posté le 13-03-2008 à 11:05:38    

- utilise plutôt preg_replace (plus complet, performant...)
- avec un masque du genre #<td class="monBlabla2">.*</td># ça devrait marcher

Reply

Marsh Posté le 13-03-2008 à 11:09:39    

les deux (ereg/preg) sont greedy par défaut.
il faut utiliser un ? dans le .* :o


---------------
Software and cathedrals are much the same - first we build them, then we pray.
Reply

Marsh Posté le 13-03-2008 à 11:26:17    

Merci, mais en fait, je me suis trompé dans ma demande exacte désolé :/
 
En fait, mon td est de la forme : <td [plein de choses] class="monBlabla2">blabla2</td>
 
Et je ne vois pas tres bien comment dans le [plein de choses] faire en sorte qu'il n'y ait pas de </td>. Que veut dire le "#" placé tout devant ? En php, ce n'est pas ^ qu'il faut mettre ?
 

Reply

Marsh Posté le 13-03-2008 à 11:39:22    

# est le délimiteur de ta pattern.
Perso j'ecrirais donc ta regex ainsi ( à utiliser dans un preg )

#<td.*class="monBlabla2">.*?</td>#


---------------
Software and cathedrals are much the same - first we build them, then we pray.
Reply

Marsh Posté le 13-03-2008 à 13:16:13    

anapajari a écrit :

il faut utiliser un ? dans le .* :o

ou l'option U
 
EDIT : et vu qu'il y a des retours à la ligne ça marche sans


Message édité par soju le 13-03-2008 à 13:25:20
Reply

Marsh Posté le 13-03-2008 à 13:27:59    

anapajari a écrit :

# est le délimiteur de ta pattern.
Perso j'ecrirais donc ta regex ainsi ( à utiliser dans un preg )

#<td.*class="monBlabla2">.*?</td>#



 
Cela ne fonctionne pas, ca m'enlève tous les td du tableau (ce qui me parait normal), le .* veut dire n'importe quel caractère, donc il va prendre tous les td se trouvant avant le "class="monBlabla2" ?

Reply

Marsh Posté le 13-03-2008 à 13:30:32    

essaye avec #<td[^>]*class="monBlabla2">.*</td>#U

Reply

Marsh Posté le 13-03-2008 à 13:32:04    

j'ai oublié le ? après le 1er .* :o

#<td.*?class="monBlabla2">.*?</td>#



Message édité par anapajari le 13-03-2008 à 13:32:40

---------------
Software and cathedrals are much the same - first we build them, then we pray.
Reply

Marsh Posté le 13-03-2008 à 15:02:18    

Les deux solutions ne fonctionnent pas.
 
Soju >> ca ne trouve aucune expression
anapajari >> la ca enleve les premiers td.

Reply

Marsh Posté le 13-03-2008 à 15:02:18   

Reply

Marsh Posté le 13-03-2008 à 15:13:52    

4bis> port'nawak :o

Code :
  1. <?php
  2. $a = '<table>
  3.     <tr>
  4.         <td>Blabla 1</td>
  5.         <td class="monBlabla2">Blabla 2</td>
  6.         <td>Blabla 3</td>
  7.     </tr>
  8. </table>
  9. ';
  10. print preg_replace('/<td.*?class="monBlabla2">.*?<\/td>/', '', $a);
  11. ?>


donne

<table>
    <tr>
        <td>Blabla 1</td>
 
        <td>Blabla 3</td>
    </tr>
</table>    



---------------
Software and cathedrals are much the same - first we build them, then we pray.
Reply

Marsh Posté le 13-03-2008 à 15:14:24    

les 2 fonctionnent avec ton exemple...

Reply

Marsh Posté le 14-03-2008 à 11:37:39    

Désolé, ca marche pour cet exemple, mais de mon côté, ca ne fonctionne pas, et je ne vois pas pouruqoi. :(
 

Citation :


<td align="right">&nbsp;&nbsp;<a class="p2" href="http://www.bo.com/outils/alertes/ajout_alerte_cotations.phtml?symbole=1rPGET"><img src="coursget.phtml_fichiers/flechej.gif" alt="Positionner une alerte" border="0" height="11" width="11"> Alerte</a>&nbsp;&nbsp;<a class="p2" id="add_list_link" onclick="open_iframe('/liste/ajout_liste.phtml?symbole=1rPGET', 'iframe_ajout', true, 400, 150, null, findPosX($('add_list_link')) - (400 - $('add_list_link').offsetWidth), findPosY($('add_list_link')) + $('add_list_link').offsetHeight);"><img src="coursget.phtml_fichiers/flechej.gif" alt="Ajouter à ma liste" border="0" height="11" width="11"> Liste</a>&nbsp;&nbsp;<a class="p2" id="add_portefeuille_link" onclick="open_iframe('/portefeuille/ajout_portefeuille_iframe.phtml?symbole=1rPGET', 'iframe_ajout', true, 600, 200, null, findPosX($('add_portefeuille_link')) - (550 - $('add_portefeuille_link').offsetWidth), findPosY($('add_portefeuille_link')) + $('add_portefeuille_link').offsetHeight);"><img src="coursget.phtml_fichiers/flechej.gif" alt="Ajouter à mon portefeuille" border="0" height="11" width="11"> Portef. virtuel</a></td>


 
Voici la ligne que je souhaite supprimer.
 
Et voici mon code :
 

Citation :


$page = preg_replace('/<td.*?ajout_alerte_cotations.*?<\/td>/', '', $page);

Reply

Marsh Posté le 14-03-2008 à 11:40:02    

$page = preg_replace('/<td.*?ajout_alerte_cotations.*?<\/td>/s', '', $page);


Message édité par anapajari le 14-03-2008 à 11:40:37

---------------
Software and cathedrals are much the same - first we build them, then we pray.
Reply

Marsh Posté le 14-03-2008 à 12:02:08    

Ca ne fonctionne pas :(
 
Il m'enlève tout la ligne complète, qui comprend un autre td avant :  
 

Citation :


<td align="left"><b><font size="+1">GGG</font></b> / <font size="-1">Euro Paris</font></td><td nowrap="nowrap">&nbsp;&nbsp;&nbsp;<span class="p2b">( 100  EUR&nbsp;&nbsp;&nbsp;<span class="vardown">-1.13%</span> )</span></td><td align="right">&nbsp;&nbsp;<a class="p2" href="http://www.bo.com/outils/alertes/ajout_alerte_cotations.phtml?symbole=1rPGET"><img src="coursget.phtml_fichiers/flechej.gif" alt="Positionner une alerte" border="0" height="11" width="11"> Alerte</a>&nbsp;&nbsp;<a class="p2" id="add_list_link" onclick="open_iframe('/liste/ajout_liste.phtml?symbole=1rPGET', 'iframe_ajout', true, 400, 150, null, findPosX($('add_list_link')) - (400 - $('add_list_link').offsetWidth), findPosY($('add_list_link')) + $('add_list_link').offsetHeight);"><img src="coursget.phtml_fichiers/flechej.gif" alt="Ajouter à ma liste" border="0" height="11" width="11"> Liste</a>&nbsp;&nbsp;<a class="p2" id="add_portefeuille_link" onclick="open_iframe('/portefeuille/ajout_portefeuille_iframe.phtml?symbole=1rPGET', 'iframe_ajout', true, 600, 200, null, findPosX($('add_portefeuille_link')) - (550 - $('add_portefeuille_link').offsetWidth), findPosY($('add_portefeuille_link')) + $('add_portefeuille_link').offsetHeight);"><img src="coursget.phtml_fichiers/flechej.gif" alt="Ajouter à mon portefeuille" border="0" height="11" width="11"> Portef. virtuel</a></td>


 
Le "s" corespond à quoi, car sur le net, y'a plein d'exemples qui l'utilisent, mais aucun ne mentionne à quoi ca sert ?

Reply

Marsh Posté le 14-03-2008 à 12:21:51    

http://fr.php.net/manual/fr/refere [...] ifiers.php :  

Citation :

s (PCRE_DOTALL)
    Avec cette option, le méta-caractère point (.) remplace n'importe quel caractère, y compris les nouvelles lignes. Sans cette option, le caractère point ne remplace pas les nouvelles lignes. Cette option est équivalente à l'option Perl /s. Une classe de caractères négative telle que [^a] acceptera toujours les caractères de nouvelles lignes, indépendamment de cette option.



---------------
Software and cathedrals are much the same - first we build them, then we pray.
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed