2010-08-18 24 views
0

Je viens de rencontrer un peu de problème avec un peu de PHP sur mon dernier projet. Fondamentalement, j'ai un bloc de texte ($text) et je voudrais rechercher à travers ce texte et retourner tous les liens MP3. Je sais que cela a quelque chose à voir avec les expressions régulières, mais je n'arrive tout simplement pas à le faire fonctionner.Rechercher un bloc de texte, retourner des liens MP3 en utilisant PHP

Voici mon code actuel:

if(preg_match_all(".mp3", $text, $matches, PREG_SET_ORDER)) { 

    foreach($matches as $match) { 
    echo $match[2]; 
    echo $text; 
     } 
    } 

Répondre

2

Encore une fois, regex est extrêmement pauvre à l'analyse syntaxique HTML. Utilisez un analyseur HTML approprié pour extraire les informations d'une page Web.

Par exemple, utilisez DOMDocument::loadHTML() pour analyser le contenu HTML, puis getElementsByTagName('a') pour obtenir une liste de liens dans la page. Pour chaque lien, getAttribute('href') pour voir où il pointe. Notez toutefois qu'il n'y a absolument aucune garantie que les fichiers MP3 seront toujours et uniquement stockés sous des noms de fichiers se terminant par .mp3. Sur le Web, le type d'une ressource ne doit pas provenir d'une extension de fichier. Le seul moyen de savoir avec certitude le type de fichier pointé par une URL est d'aller le chercher (avec une requête HTTP GET ou HEAD).

+0

Merci beaucoup pour votre réponse. Le seul problème est que j'essaie d'extraire les liens d'une chaîne, pas une page Web - puis-je toujours utiliser un analyseur HTML? – Shola

+0

Oui, c'est ce que fait loadHTML() '. Il ne se soucie pas de savoir si la chaîne a été extraite du réseau ou non. – bobince