2009-09-29 7 views
0

Ahoy là!Syntaxe regex pour extraire la source d'une image

Je ne peux pas "deviner" syntaxe sorcière devrais-je utiliser pour être en mesure d'extraire la source d'une image, mais simplement l'adresse Web pas le src= ni les guillemets?

Voici mon morceau de code:

function get_all_images_src() { 
    $content = get_the_content(); 
    preg_match_all('|src="(.*?)"|i', $content, $matches, PREG_SET_ORDER); 
    foreach($matches as $path) { 
     echo $path[0]; 
    } 
} 

Quand je l'utilise, je suis ce imprimé:

src="http://project.bechade.fr/wp-content/uploads/2009/09/mer-300x225.jpg" 

Je veux seulement obtenir ceci:

http://project.bechade.fr/wp-content/uploads/2009/09/mer-300x225.jpg 

Tous idée?

Merci pour votre aide.

+0

Je ne connais pas PHP, mais je suggère d'essayer PREG_PATTERN_ORDER, et peut-être $ path [1]. – Beta

Répondre

0

Merci Ithcy pour sa bonne réponse. Je suppose que je suis trop longtemps pour répondre parce qu'il a supprimé, je ne sais pas où sa réponse est parti ...

Voici donc celui que je l'ai reçu par mail:

'| src = "(. *?)" | I' n'a aucun sens en tant qu'expression rationnelle . essayez '| src = "([^"] +) "| i' au lieu (ce qui est toujours pas la solution la plus robuste mais est mieux que ce que vous avez .)

En outre, quoi. Tout le monde a dit: Vous voulez $ chemin 1, NOT $ chemin [0]. Vous êtes déjà en train d'extraire tous les attributs src en $ correspondances []. Cela a rien à voir avec $ path [0]. Dans ne pas obtenir tous les attributs src dans le texte, il y a un problème ailleurs dans votre code.

Une chose - vous devez utiliser un vrai analyseur HTML pour cela, parce que les balises img ne sont pas les seules balises avec les attributs src . Si vous utilisez ce code la source HTML brut, il va match de pas seulement, mais balises, etc.

- ithcy

je fait tout ce qu'il m'a dit de faire, y compris en utilisant un HTML analyseur de Bart (2ème réponse).

Cela fonctionne comme un charme! Merci mon pote ...

3

$path[1] au lieu de $path[0]

+0

J'utilise '$ path [0]' parce que je veux afficher toutes les images src, je viens d'obtenir le premier avec '$ path [1]' –

5

Pas exactement une réponse à votre question, mais lors de l'analyse html, envisagez d'utiliser un analyseur HTML approprié:

foreach($html->find('img') as $element) { 
    echo $element->src . '<br />'; 
} 

Voir: http://simplehtmldom.sourceforge.net/

+0

Vraiment intéressant mate! Merci pour le partage ... Rend les choses plus faciles –

0
echo $path[1]; 

$ chemin [0] correspond à la chaîne complète. $ path [1] est le premier regroupement.

+0

Exactement ma pensée ... –

0

Vous pouvez exploser la chaîne en utilisant « comme délimiteur, puis le deuxième élément du tableau que vous obtenez serait la chaîne de droite:

$ array = explode (' »', full_src de $);

$ bit_you_want = $ tableau [1];

votre fonction Refonte d'origine, ce serait:

function get_all_images_src() {  
$content = get_the_content();  
preg_match_all('|src="(.*?)"|i', $content, $matches, PREG_SET_ORDER);  
foreach($matches as $path) { 
$src = explode('"', $path);  
echo $src[1];  
} 
} 
+0

Pouvez-vous aller de l'avant s'il vous plaît, je vais avoir du mal avec PHP ... –

Questions connexes