//Début et fermeture du tag
$posd = '<h2';
$pose = '</h2>';
$pos1 = strpos($CONTENT, $posd);
$pos1 = strpos($CONTENT, '>', $pos1);
$pos2 = strpos($CONTENT, $pose);
//On affiche l'intérieur du tag
echo substr ( $CONTENT , $pos1+strlen($posd) , $pos2-$pos1-strlen($posd) );
Si tu cherche a parti d'un indice :
//Début et fermeture du tag
Indice se trouvant le plus proche possible après le tag recherché
$where='// Pseudo';
$posd = '<a';
$pose = '</a>';
$pos1 = strpos($CONTENT, $where);
$pos1 = strripos($CONTENT, $posd ,$pos1);
$pos1 = strpos($CONTENT, '>', $pos1);
$pos2 = strpos($CONTENT, $pose);
//On affiche l'intérieur du tag
echo substr ( $CONTENT , $pos1+strlen($posd) , $pos2-$pos1-strlen($posd) );
Des fois les codes compliqué nous empêche de comprendre le processus, alors simplifions pour mieux comprendre.
Ton 1er code ne fonctionne pas s'il y a plus d'un tag de ce type. Il ne va trouver que le premier.
Ton 2ème code n'a pas l'air de fonctionner, ou alors, je ne vois pas ce que tu entends par "indice". Dans le cas présent, ce qui est entre les balises est ce que l'on cherche. Donc, on n'a pas d'indices sur cela, et "// Pseudo" est juste un commentaire que Rayfi inclue dans son exemple, et qui ne fait pas partie du html présent dans le contenu. L'indice en question ne semble pas non plus pouvoir être tu texte contenu dans la balise ouvrante (ou j'ai mal compris).
Le résultat du code suivant, avec un code html de base plus complet teste tes solutions et la mienne (ce que l'on cherche est ce qui est en gras) :
<?php
$value = <<<EOT
<a href="/" name="top" title="CommentCaMarche"><img src="http://static.ccm2.net/www.commentcamarche.net/_skin/_local/img/logo.png?201007091112" alt="CommentCaMarche" /></a>
</div>
<form action="/search/index" method="get" class="headerFooter">
<fieldset>
<legend>Recherche</legend>
<input type="text" id="searchform_input" name="q" class="search" value="Rechercher" onfocus="if($('searchform_focused').value==0){ $('searchform_input').value=''; $('searchform_focused').value=1; };" />
<input type="hidden" id="searchform_focused" name="already_focused" value="0" />
<input type="submit" class="submit" value="OK" />
</fieldset>
</form><script type="text/javascript">
//<![CDATA[
q = refk();
if($('searchform_input')&&q&&q!=' ') {
$('searchform_input').value=q;
$('searchform_focused').value=1;
}
//]]>
</script>
<div id="topNav"><ul>
<li id="user">
<li id="user">
<a href="/profile/user/%5BDal%5D" class="userName boxButton">
[Dal] </a>
<a href="/forum/inbox/" class="newMsg">
<img src="http://static.ccm2.net/www.commentcamarche.net/_skin/_common/img/ico_noMsg.gif?54344445544" alt="0 nouveau(x) message(s)" />
</a>
<div class="boxHover" style="font-size:120%">
<form id="user_pref_boxhover">
EOT
;
if (preg_match('#class="userName boxButton">\s+([^\s]+)\s+</a>#s', $value, $matches)) {
echo "Le pseudo a été trouvé : " . $matches[1];
} else {
echo "Le pseudo n'a pas été trouvé";
}
$CONTENT = $value;
//Début et fermeture du tag
$posd = '<a';
$pose = '</a>';
$pos1 = strpos($CONTENT, $posd);
$pos1 = strpos($CONTENT, '>', $pos1);
$pos2 = strpos($CONTENT, $pose);
//On affiche l'intérieur du tag
echo "<p>Résultat 1 : " . substr ( $CONTENT , $pos1+strlen($posd) , $pos2-$pos1-strlen($posd) ) . "</p>";
// Si tu cherche a parti d'un indice :
//Début et fermeture du tag
// Indice se trouvant le plus proche possible après le tag recherché
$where='userName boxButton';
$posd = '<a';
$pose = '</a>';
$pos1 = strpos($CONTENT, $where);
$pos1 = strripos($CONTENT, $posd ,$pos1);
$pos1 = strpos($CONTENT, '>', $pos1);
$pos2 = strpos($CONTENT, $pose);
//On affiche l'intérieur du tag
echo "<p>Résultat 2 : " . substr ( $CONTENT , $pos1+strlen($posd) , $pos2-$pos1-strlen($posd) ) . "</p>";
?>
Mon "code" n'est pas plus "compliqué" que le tien (il est même plus court et permet de tester si l'on a trouvé quelque chose ou pas).
Ce qui est moins évident, bien sûr, c'est de composer la bonne regexp pour le cas qui nous concerne. C'est juste une syntaxe à connaître.
#class="userName boxButton">\s+([^\s]+)\s+</a>#s
Signifie :
- cherche en considérant le contenu recherché comme une seule ligne (modificateur "s" pour "single")
- quelque chose comportant class="userName boxButton">
- avec un ou plusieurs blancs à la suite : \s+
- capture ensuite un ou plusieurs caractères à la suite qui ne sont pas des blancs : ([^\s]+)
- à la suite de cela il y a un ou plusieurs blancs : \s+
- à la suite de cela il y a </a>
Je comprend regexp, mais quand j'ai commencé comme débutant je n'y comprenait rien et les code que je trouvait me rendais dépendent de solution fixe auquel j'étais incapable de modifier.
Alors selon moi il est toujours mieux de commencer en bas de l'échelle et comme sa devenir autonome.
Oui, bien sûr, tu as raison de dire que l'on peut tenter d'utiliser strpos au lieu de preg_match si on ne comprend pas les regexp. Cela peut être, d'ailleurs, plus adapté dans certains cas, le fonctionnement de strpos étant sans doutes plus rapide que le moteur de regexp.
Même si ton code est limité et ne donne pas le résultat escompté sur l'exemple demandé, il a le mérite de donner une idée de comment cela peut être fait dans certains cas.
En ce qui concerne la regexp proposée, à la réflexion, je pense que la regexp ne peut pas ignorer les blancs entre les balises (du moins de façon simple), car les noms d'utilisateurs peuvent contenir des espaces, comme "Franky do".
Alors, en utilisant :
#class="userName boxButton">(.*?)</a>#s
on devrait simplement capturer le contenu de la balise.
Je pense que le savoir ne prend guère de place et qu'il y a des cas où on ne peut pas se passer des regexp. Si l'objectif de Rayfi est de pouvoir faire cela sur d'autres codes Html que celui de la page de CCM, et qu'il doit utiliser les regexp, il vaudra mieux qu'il apprenne.
Il faut commencer par quelque chose de simple. On peut utiliser des regexp et faire des choses simples avec, au départ, et ne complexifier que lorsqu'on a maîtrisé les choses simples et qu'on se rend compte que l'on veut (et peut) faire plus.
Utiliser quelque chose comme http://www.weitz.de/regex-coach/ pour les tester facilement et voir le résultat en temps réel de la regexp que l'on tape, ou utiliser l'un des nombreux sites en ligne qui permettent de tester des regexp.
C'est un outil génial (malheureusement aujourd'hui uniquement maintenu sous Windows). Si vous l'utilisez pensez à remercier l'auteur et encourager la continuation de son travail en lui faisant une donation.