[PHP] Parser une chaine avec un masque debut/fin - Splendiiiiiiiiiiiiiiiiide... bon je sors

Salut !

Une question à la con mais ca fait 1heure que je cherche une fonction PHP me permettant d’extraire une chaine d’une autre chaine… Je donne un exemple :


<?php

$chaine = "Toto se balade sur le forum <b>clubic</b>";

?>

J’aimerais pouvoir afficher ou recupérer dans une variable que “clubic” donc en gros ce qu’il se trouve entre les deux balises <b> ! Avez vous une idée ou plutot une fonction qui fait ce traitement ?

Merci d’avance !

une preg, non ?
quelque comme ça :

:clap: :super:

Merci Mr… Ca fonctionne niquel ! :ange:

Ouai na en fait ca fonctionne pas il me retourne un tableau vide…
La chaine que j’analyse est :

$chaine = ‘<a href=“http://www.rammsteinworld.com/”>’
Je souhaiterai avoir en retour : ‘http://www.rammsteinworld.com/

Donc j’ai modifier ainsi mais rien n’y fait :


preg_match_all('/href="([\w]+)"/i', $chaine, &$answer);
echo var_export($answer, true);

:sweet:


preg_match_all('/href="(.+)"/', $chaine, $answer);

Mais je suis pas un pro du regexp, mais c’est l’expresion reguliere qui a l’aire de pas passé :slight_smile:

Moi non plus je dirai même que je suis inculte je comprend pas du tout la syntaxe de cette fonction et j’ai beau regardé sur le net il n’y a rien de bien bien expliqué… Pourtant c’est super util ! Je vais tester ca et je vous dit !

C’est testé la tienne ne marche pas, la miene si, mais il risque d’avoir des probleme, exemple il s’arrette pas au bon " car le .+ comprent les " si je me souvien bien.

Hum d’accord

Bon pas de message d’erreur mais par contre pour l’affichage, comment faut il procéder avec cette fonction ? Ca retourne un tableau si je ne m’abuse… mais sous quelle forme ?

Oh d’accord… c’est très puissant cette fonction ! Et il est possible de connaitre le nombre d’occurence… euh n question con on compte ce quil y a dans le tableau ! J’ai rien dit ! BOn je teste et je te dit ce que ca me donne :slight_smile:

http://fr3.php.net/manual/fr/function.preg-match-all.php

Je croi que je me suis trop avancé pour repondre.Regarde plutot le lien que je tes donnée plus haut.
Ma reponce est pour une autre fonction de regexp.


$ligne_en_cours = fgets($fichier, 4096); // lecture du contenu de la ligne
preg_match_all('/href="(.+)"/', $ligne_en_cours, $lien);
echo $lien[1] . "<br>";

Ca me donne ca :

Array
Array
Array
Array
Array

:whistle:

D’accord, je suis dessu la mais je l’avais déjà vu ce liene t je capte pas tous les antislash les guillement et tout je ne vois pas a quoi cela corespond et ce n’es pas expliqué ou sinon il faut que je change de lunette ou que j’en achete plutot :paf:

Bon j’ai lu la doc,
Ca te donne :
Quand une syntaxe qui correspond a ta regexp est trouvé ca crée un sous tableau,
dedant tu as ce que j’ai marque plus haut :
Donc 0 = Toutes la chain qui corespond a la regexp,
et 1,2,3,4 ce qui corespond a ce que tu as mis entre ( ) dans ta regexp.

Mouai bah y a un truc qui merde alors car il m’affiche Array comme je t’ai montré plus haut ! Je capte un peu mieux le système sauf cette histoire de regexp !

Oui, ce sont des sous tableau dans un tableau.


$Tableau = array( array ( 'Premiere chain', 'Premier resultat', '2eme' , ... ) , array( '2eme Chain', '1er resultat de la 2eme chaine' , ... ) , ... );

Fait :

print_r( $lien );

Tu va tout ce suite comprendre.

Mouai je vois un peu mieux le pb c’est que le code est dans un while donc j’ai un bloc qui s’affiche donc c’est pas évident a decerner… mais je vois pas comment automatiser l’affichage dans ce cas :pt1cable:


<?php
$chaine = '<a href="http://www.site1.com/"> <a href="http://www.site2.com/"> <a href="http://www.site3.com/">';

// Methode 1 ( PREG_SET_ORDER )
preg_match_all('/href="([^\"]+)"/', $chaine, $Resultats , PREG_SET_ORDER);
foreach( $Resultats as $Key => $Value ) {
	echo 'Resultat n°'.$Key.' : '.$Value[1].' ( Chaine Parsé : '.$Value[0].' )<br>';
}
// Methode 2 ( PREG_PATTERN_ORDER )
preg_match_all('/href="([^\"]+)"/', $chaine, $Resultats , PREG_PATTERN_ORDER);
foreach( $Resultats[0] as $Key => $Value ) {
	echo 'Resultat n°'.$Key.' : '.$Resultats[1][$Key].' ( Chaine Parsé : '.$Value.' )<br>';
}
?>

hop la !

D’accordddddddddddddd oups floud :pfff:

Je viens de capter le truc c’est bon ! ah mais c’est ultrapuissant ce que l’on peut faire avec :slight_smile: Merci de ton aide en tout cas ! Je l’aisse le post “ouvert” si jamais la peaufination du code me pose problème !

Merci :wink:

Mais j’était pourtant sur qu’il existait une fonction php qui pouvais par exemple retiré les 5 premier caractère alphanumérique d’une autre chaine ou les dernier ca aurai été possible aussi comme ca… Ca te dit quelquchose cette fonction ?