Aller au contenu

decomposer du texte


Sujets conseillés

Posté

Bonjour,

J'ai comme l'impression que je cherche compliqué pour un truc simple mais je suppose que je dois pas utiliser les bonnes fonctions.

je cherche a trouver dans du texte presenté comme ceci :

<li><a href="028365.html">[Gennpdc] [62] DELABRE - MALLET 
</a><a name="28365"> </a>
<i>Jean-Philippe
</i></li>

le lien : 028365.html

le titre : [62] DELABRE - MALLET

le prénom : Jean-Philippe

qui a une idée simple pour faire ca en 3 lignes au lieu de 30 :wacko: ?

Posté (modifié)

salut,

la fonction http://www.expreg.com/pregsplit.php en te servant des regex (expressions régulières) me semble être un bon choix pour ce genre de manipulation de chaines. Il faut cependant que la structure de la chaine soit toujours identique aux niveau des tags qui vont constituer les masques.

Modifié par slender
Posté

essaie ca,

ton seul job est d'enlever les guillemets dans la premier chaine de code html au départ, ensuite tu appliques ces quelques lignes

<?php
// 1ere chaine
$string = "<li><a href=028365.html>[Gennpdc] [62] DELABRE - MALLET";
$mot = split("<li><a href=",$string);
$mot = split(">[[]Gennpdc[]]",$mot[1]);
$lien = $mot[0];
$titre = $mot[1];
// 2eme chaine
$string = "<i>Jean-Philippe";
$mot = split("<i>",$string);
$prenom = $mot[1];
// results:
echo $lien."<br />".$titre."<br />".$prenom;
?>

j'espere que ca ira car ca fait le job mais je pense que des spécialistes en regex feraient ca en une ligne.

Posté

pas mal comme demarche, elle est plus propre que la mieux qui recherchais des position qui decoupé la chaine de telle à telle position etc... avec strpos etc..

voici ma version définitive du midi :

// 1ere chaine
$string = "<li><a href=\"028365.html\">[Gennpdc] [62] DELABRE - MALLET
</a><a name=\"28365\"> </a>
<i>Jean-Philippe
</i></li>";

$message =  split("\n",ereg_replace("\"","",$string));
$mot = split("<li><a href=",$message[0]);
$mot = split(">[[]Gennpdc[]]",$mot[1]);
$lien = $mot[0];
$titre = $mot[1];
// 2eme chaine
$mot = split("<i>",$message[2]);
$prenom = $mot[1];
// results:
echo $lien."<br />".$titre."<br />".$prenom;

Posté

Une autre version :

<?

$string = "<li><a href=\"028365.html\">[Gennpdc] [62] DELABRE - MALLET
</a><a name=\"28365\"> </a>
<i>Jean-Philippe
</i></li>";

preg_match("<a href=\"(([a-z0-9]+)\.([a-z0-9]+))\">",$string,$array);
$tmp = explode(" ",strip_tags($string));
$nom = substr($tmp[0],10);
$prenom = $tmp[1];

echo "<bR>-->".$array[1];
echo "<bR>-->".$nom;
echo "<bR>-->".$prenom;

?>

Voilà. Plusieurs solutions, mais tout dépend des éléments 'stables' de ta chaine.

Anonymus.

Posté
preg_match("<a href=\"(([a-z0-9]+)\.([a-z0-9]+))\">",$string,$array);
$tmp = explode(" ",strip_tags($string));
$nom = substr($tmp[0],10);
$prenom = $tmp[1];

Voilà. Plusieurs solutions, mais tout dépend des éléments 'stables' de ta chaine.

Anonymus.

<{POST_SNAPBACK}>

pas mal Anonymus ! 4 lignes, je me disais bien que j'avais fait trop compliqué.

Pour la stabilité des elements... disons que mes archives sont généré automatiquement sous cette forme depuis Octobre 2002 ... donc 2 ans et demi, je considère cela comme stable, cela dit, je suis bien conscient que cela peut changer a tout moment suite a une montée de version du soft.

Bon allez, je m'en vais finir la construction de mon fil RSS.

Posté

Pour le plaisir ;)

$string = "<li><a href=\"028365.html\">[Gennpdc] [62] DELABRE - MALLET
</a><a name=\"28365\"> </a>
<i>Jean-Philippe
</i></li>";

preg_match("/(<a href=\"([a-z0-9]+\.[a-z0-9]+)\">)(\[Gennpdc]) ([^<\/]*)(.*)/",str_replace("\n"," ",$string),$array);

echo"<br>".$array['2'];
echo"<br>".$array['4'];
echo"<br>".substr(strip_tags($array['5']),6);

Mais bon.. Les expressions regulières, c'est pas mon truc.. :(

Là c'est bon je m'arretes :D

Posté

:clap::clap::clap:

tout est possible sur webmaster-hub ;)

et après tu oses dire que tu ne te sens pas professionnel parce que tu sais pas faire la récursivité ;)

Veuillez vous connecter pour commenter

Vous pourrez laisser un commentaire après vous êtes connecté.



Connectez-vous maintenant
×
×
  • Créer...