Précédent   Forum des professionnels en informatique > PHP > Langage > Regex
Regex Forum d'entraide sur les expressions rationnelles PHP. Avant de poster -> FAQ regex, Cours de regex et Sources de regex
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 16/12/2006, 08h49   #1
Invité régulier
 
Inscription : janvier 2006
Messages : 23
Détails du profil
Informations forums :
Inscription : janvier 2006
Messages : 23
Points : 6
Points : 6
Par défaut Problème sélection données entre balises

Bonjour à tous,

Je me trouve face à un problème que je n'arrive point à résoudre concernant la composition d'un regex.

J'aimerai en effet pouvoir sélectionner des informations qui se trouvent entre des balises <th></th> d'un grand tableau, mais sans sélectionner, dans ces balises <th></th> le contenu des autres balises qui s'y trouvent.

Pour plus de clarté, voici un petit exemple de ce j'ai avant traitement :
Code html :
1
2
3
4
5
6
7
8
9
10
11
12
<tr>
            <th>Info 1</th>
                <th>
                <a href="http://www.monsite.com">
        <img src="http://www.monsite.com/image.gif"/>
        </a>
                &nbsp;
        </th>
        <th>Info 2</th>
 
        <th>Info 3</th>   
       </tr>

Et voici ce que j'aimerai avoir après traitement :

Code html :
1
2
3
<th>Info 1</th>
<th>Info 2</th>
<th>Info 3</th>


J'aimerai donc pouvoir récupérer Info 1, Info 2 et Info 3 situés à l'intérieur des balises <th></th>, mais pas le contenu des autres balises se trouvant elles mêmes à l'intérieur de balises <th></th> (comme le contenu des balises <a> et <img>).


Voici le code que j'ai pour l'instant, mais qui ne fonctionne que partiellement. En effet, il sélectionne tout ce qui se trouve entre les balises <th></th>, même le contenu des balises non désirées.
Code :
preg_match_all("!<th.*?>(.*?)</th>!is",$texte,$tab_th)
Et voici ce que je récupère avec ce regex :

Code html :
1
2
3
4
5
6
7
8
9
<th>Info 1 </th>
         <th>Info 2</th>
<th>
<a href="http://www.monsite.com">
<img src="http://www.monsite.com/image.gif"/>
</a>
&nbsp;
</th>
<th>Info 3</th>



J'espère avoir été assez clair.

Merci par avance pour votre aide.
raptorman est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/12/2006, 21h25   #2
Modérateur
 
Avatar de Nesmontou
 
Homme Benjamin PREVOT
Architecte de système d'information
Inscription : septembre 2004
Messages : 1 569
Détails du profil
Informations personnelles :
Nom : Homme Benjamin PREVOT
Âge : 30
Localisation : France, Nord (Nord Pas de Calais)

Informations professionnelles :
Activité : Architecte de système d'information
Secteur : Finance

Informations forums :
Inscription : septembre 2004
Messages : 1 569
Points : 2 503
Points : 2 503
Salut, j'ai testé ça :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
<?php
$pattern = '`<th>(\n|\t|\r)*<.+</th>`ismU';
$text = '<th>Info 1 </th>
<th>Info 2</th>
<th>
<a href="http://www.monsite.com">
<img src="http://www.monsite.com/image.gif"/>
</a>
&nbsp;
</th>
<th>Info 3</th>';
 
echo preg_replace($pattern, '', $text);
?>
et le résultat est :
Code :
1
2
3
4
<th>Info 1 </th>
<th>Info 2</th>
 
<th>Info 3</th>
C'est une idée à froid, bon développement
__________________
Si vous ne pouvez expliquer un concept à un enfant de six ans, c'est que vous ne le comprenez pas complètement. Albert EINSTEIN

F.A.Q. : Java, PHP, (X)HTML / CSS

N'oubliez pas de cliquer sur le bouton Résolu en bas de page quand vous avez obtenu une solution à votre problème
Nesmontou est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/12/2006, 15h45   #3
Invité régulier
 
Inscription : janvier 2006
Messages : 23
Détails du profil
Informations forums :
Inscription : janvier 2006
Messages : 23
Points : 6
Points : 6
Salut Nesmontou et merci pour ta réponse.

En effet, cela marche impeccablement bien, je vais voir ce que je peus en tirer.

Merci encore
raptorman est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/12/2006, 20h39   #4
Membre émérite
 
Inscription : mai 2004
Messages : 709
Détails du profil
Informations personnelles :
Localisation : Belgique

Informations forums :
Inscription : mai 2004
Messages : 709
Points : 852
Points : 852
Citation:
Envoyé par Nesmontou
Code :
1
2
3
4
5
6
7
<?php
$pattern = '`<th>(\n|\t|\r)*<.+</th>`ismU';
 
// ...
 
echo preg_replace($pattern, '', $text);
?>

Désolé de devoir tempérer l'enthousiasme général mais cette regex ne marchera pas

Pour vérifier, faire:
Code :
echo htmlentities(preg_replace($pattern, '', $text));
Essayer simplement ceci:
Code :
1
2
3
4
5
$pattern = '`<th>(.*)</th>`eisU';
 
// ..
 
echo htmlentities(preg_replace($pattern, "'<th>'.strip_tags('$1').'</th>'", $text));
__________________
:q :q! :wq :w :w! :wq! :quit :quit! :help help helpquit quit quithelp
:quitplease :quitnow :leave :shit ^X^C ^C ^D ^Z ^Q QUITDAMMIT
Jabber: ripat at im.apinc.org
ripat est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 09h39.


 
 
 
 
Partenaires

Hébergement Web