Aide - Recherche - Membres - Calendrier
Version complète : Segments De Chaines
La Communauté TitaXium > Service Communication > Espace Developpement
barodeur76
Bonjour,

Cela fait maintenant plusieurs jours que je planche sur un script qui recuperai des segment de chaines définies par deux extrais :

Je pécise :

J'ai une chaine de type html :
Code
$chaine = "<html>
<head>
<title>Bla bla bla bla</title>
</head>
<body>
Comment allez vous ? ( <a href=\"http://xxx.com\" style="style">Texte un</a>)<br />
<a href=\"http://http://xxx.net\" style="style">Text deux</a>
</body>
</html>";

De cette chaine je voudrais recuperer un segment délimité entre les balise <a et </a> et recuperer de la même manièrer le contenu tu href et le texte du lienet don pouvoir retourner avec un echo un autre lien sans les styles ou autres attributs :

Code
<a href=\"http://xxx.com\">Texte un</a><br /><a href=\"http://http://xxx.net\">Text deux</a><br />

Merci.
barodeur76
Ah je croit avoir trouver,

Alors je vous file le lien pour ceux qui chercherai aussi :
http://siteduzero.net/php/regex1.php

Merci quand même.
elf
Déja je te dirais de prendre les ' car il est prouvé que c'est plus propre et plus rapide niveau temps d'execution que les " (que pour le php evidamment tu laisse les " dans les attributs html)

Sinon

$que_a=preg_replace('!^.*((<a.*>.*</a>)+).*$!','$1',$chaine);
barodeur76
C'est très gentil de m'aider,

mais je n'arrive pas à écuperer le resultat :/
avec un boucle pour analyser les liens puis les afficher.

si quelqu'un pouvais m'aider ...

Merci
K-jasi
Utilise la fonction preg_match_all, elle permet de parcourir toute la chaine de caractères pour trouver toutes les occurences qui correspondent au masque. Tu récupères simplement le résultat dans une variable $matches, sur laquelle tu peux faire une petite boucle et ainsi afficher tout ce qu'il te faut.
L'exemple de la doc se rapproche pas mal de l'application que tu veux faire, tu peux t'en inspirer wink.gif
Antoine_935
il me semble qu'il existait une série de fonction spécifique permettant de récupérer les balises d'un fichier HTML. à moins que ce ne soit en python...

A voir, mais il me semble que ca existait wink.gif
barodeur76
En effet ca pourait etre interressant si c'est du style prase_url, sinon pour nos regex je n'arrive toujours pas à touver comment retourner les lien :/

J'ai pensser a quelquecose du type :
Code
$html = '<a pwet href="salut.html" style="xxx">clique Nous</a><br />';
$text = preg_replace('!<a\s(.+)\shref=(.+)\s(.+)>(.+)</a>!i','<a href=$2>$3</a>',$html);
echo $text;

Mais j'en ai rien tiré. Pourtant le raisonement m'a l'air bon.

[EDIT]
Mais en fait ce que je veut recuperer comme je le disait au debut, c'est de recuperer une boucle avec comme valeurs $href et $texte pour recuperer des informations sur l'url avec prase_url.

Voila
barodeur76
Cette fois j'approche :
Code
$html = '<a pwet href="salut.html" style="xxx">clique Nous</a><br /><a pwet href="NON" style="xxx">cliquez Vous</a><strong>Blablabla</strong>';
preg_match_all("!<a\s.+\shref=(.+)\s.+>(.+)</a>!i",$html,$out);
for ($i=0;$i<count($out);$i++) {
echo "<a href=".$out[1][$i].">".$out[2][$i]."</a><br />";
}

Ce code ne retourne que la dernière url et ajoute deux erreurs de tableau undefined offset 1 et 2 la ligne du echo.

[EDIT] Possible que je me soit tromper dans de regex, c'est a verifier.

Merci.
Fantome
Voila un code qui marche :
Code
$html = '<a pwet href="salut.html" style="xxx">clique Nous</a><br /><a pwet href="NON" style="xxx">cliquez Vous</a><strong>Blablabla</strong><br /><a href="OUI" style="xxx">clique Moi</a><br /><a style="xxx" href="BAH">cliques Toi</a>';
preg_match_all("/<a[^>]+href=\"([^>\"]+)\"[^>]*>([^(<\/a>)]+)<\/a>/i",$html,$out);

if ( count($out) )
{
 for ($i=0;$i<count($out[0]);$i++)
 {
   echo "<a href=".$out[1][$i].">".$out[2][$i]."</a><br />";
 }
}


Il y avais une erreur avec les for :
Code
for ($i=0;$i<count($out);$i++)
tu compte pas la bonne dimension du tableau, là tu compté le nombre de masque + 1, pour avoir le nombre de résultat il faut soit récupéré la valeur renvoyer par preg_match_all() soit compter le nombre d'élément de $out[0], avec un if pour vérifier qu'il y a des résultat pour éviter une Notice
barodeur76
Bien voila j'ai réussi, vous pouvez voir le resultat final a l'adresse suivante :

http://visitosurf.net/demo/manuel-visionneuse.php

(Faites F5 si ca affiche pas les liens parce que cetains sites utilisent des frames, problème a corriger dailleurs)

Je doit encore faire quelques modifications sur les src des images mais dans l'ensemble je suis assez content de moi.

Voila, Merci pour votre aide.
Ceci est une version "bas débit" de notre forum. Pour voir la version complète avec plus d'informations, la mise en page et les images, veuillez cliquer ici.
Invision Power Board © 2001-2010 Invision Power Services, Inc.