[ereg] Retrouver tout les liens des images <img> et des liens <a>

Retrouver tout les liens des images <img> et des liens <a> [ereg] - PHP - Programmation

Marsh Posté le 17-11-2005 à 21:41:47    

hello,
 
voici mon problème, j'ai une chaîne avec à l'intérieur du code html.
 
Je voudrais pouvoir récupérer dans cette chaîne lles champs "mavaleur" de tout les liens <img src="mavaleur" height="" ...> et <a href='mavaleur' class=''...>
 
Une solution est à mon avis avec les expressions régulières et la fonction "preg_match_all", mais impossible de faire ce que je veux avec...
 
Si quelqu'un métrise merci...
 
 

Code :
  1. $texte = "<HTML>";
  2. $texte .= "<HEAD>";
  3. $texte .= "<TITLE> New Document </TITLE>";
  4. $texte .= "<META NAME='Generator' CONTENT='EditPlus'>";
  5. $texte .= "<META NAME='Author' CONTENT=''>";
  6. $texte .= "<META NAME='Keywords' CONTENT=''>";
  7. $texte .= "<META NAME='Description' CONTENT=''>";
  8. $texte .= "</HEAD>";
  9. $texte .= "<BODY>";
  10. $texte .= "test";
  11. $texte .= "<a href='http://www.site.com' target=''>test</a>";
  12. $texte .= "<a href='http://www.site.com' target=''>test</a>";
  13. $texte .= "<a href='?idnav=23' target=''>test</a>";
  14. $texte .= "</BODY>";
  15. $texte .= "</HTML>";
  16. preg_match_all("|<[^a>]+>(.*)</[^>]+>|U",$texte, $out);
  17. echo $out[0][0] . ',' . $out[0][1] . "\n";
  18. echo $out[1][0] . ',' . $out[1][1] . "\n";


 
 
merci d'avance
 

Reply

Marsh Posté le 17-11-2005 à 21:41:47   

Reply

Marsh Posté le 17-11-2005 à 21:53:29    

#<a href='(.+)'.*>#U pour le pattern :/

Reply

Marsh Posté le 17-11-2005 à 21:58:06    

voir meme : #(?:href|src)='(.+)'#U


Message édité par afbilou le 17-11-2005 à 21:59:15
Reply

Marsh Posté le 17-11-2005 à 22:09:55    

merci..
 
j'ai fait cela ca devrait marcher dans tous les cas pas le href directement apès le <a class='' href=''..> et les balise <a href=\"test.php\">
 

Code :
  1. preg_match_all("#<a.+href=['\"](.+)'.*>#U",$texte, $out);
  2. echo $out[1][0]."<br>";
  3. echo $out[1][1]."<br>";
  4. echo $out[1][2]."<br>";
  5. preg_match_all("#<img.+src=['\"](.+)['\"].*>#U",$texte, $out);
  6. echo $out[1][0]."<br>";
  7. echo $out[1][1]."<br>";


 
si vous voyez d'autres améliorations ou que dans certains cas cela fonctionne pas... dites le moi merci

Reply

Marsh Posté le 17-11-2005 à 22:18:20    

Si tu veux distingué '...' de "..." il faut mieux faire comme ca :
#\s(?:href|src)=('|" )([^ ]+)\1\s#U
le \1 represente une reference arriere : ici c'est le ' ou le " deja repere apres le href ou le src.
 
[edit : legere modif du masque]


Message édité par afbilou le 17-11-2005 à 22:26:58
Reply

Marsh Posté le 17-11-2005 à 22:34:31    

$texte .= "<a href='http://www.site.com' target=''>test</a>";
$texte .= "<a class='dsf' HREF='http://www.site.com' target=''>test</a>";
 
preg_match_all("#<[aA].+[hrefHREF]=['\"](.+)'.*>#U",$texte, $out);
 
dans le premier cas ca marche masi dans le 2ème il me met dsf

Reply

Marsh Posté le 17-11-2005 à 22:40:29    

#\s(?:href|src)=('|" )([^ ]+)\1\s#Ui
 
Faudrait voir a te documenter pour ce genre de probleme de casse :/
Le OU en PCRE c pas [...] c'est |
[hrefHREF] NON
(href|HREF) OUI MAIS
href avec l'option i (sans casse) TOUT BON


Message édité par afbilou le 17-11-2005 à 22:42:38
Reply

Marsh Posté le 17-11-2005 à 22:43:02    

merci je vais encore regarder...
 
Faudrait que j'y mette un coup sur tout...car c'est vraiment pratique...
 
merci  

Reply

Marsh Posté le 17-11-2005 à 22:45:43    

[hrefHREF] ca matche h ou r ou e ou f ou ... ou E ou F
pas href ou HREF

Reply

Marsh Posté le 17-11-2005 à 22:49:23    

T'as essayé mon exemple a tout hasard kand meme ou je "parle dans le vide" ? :D
#\s(?:href|src)=('|" )([^\s]+)\1\s#Ui

Reply

Marsh Posté le 17-11-2005 à 22:49:23   

Reply

Marsh Posté le 18-11-2005 à 10:23:35    

Euh, pourquoi ([^\s]+) ? T'attends un espace avant le ' ou le " fermant le href ?
 
Je dirais #(?:<a\s.*href|<img\s.*src)=(\'|" )([^(?:\1)]+)\1#Ui
 
(Ca devient joli. :o)


---------------
StarCraft Professional Gaming Database | [Ze Topic] Starcraft/BroodWar
Reply

Marsh Posté le 18-11-2005 à 12:25:24    

Non il faut mieux mettre un \s parce ke dans le cas ou l'attribut href est mal formé :
href='sgdfgsd" class='pouet'
l'expression reguliere matcherait href='sgdfgsd" class='
Donc ma solution est mieux !

Reply

Marsh Posté le 18-11-2005 à 12:32:43    

#\s(?:href|src)=('|" )([^\s]+)\1(?:\s|> )#Ui

Reply

Marsh Posté le 18-11-2005 à 14:19:48    

Ah ben un truc mal formé a pas nécessairement à ramener des résultats cohérents. :spamafote:
 
Pasqu'après si t'as un truc genre :
<a href="foo'>"blabla"</a>
 
Faut l'interpréter comment ? C'est qu'un exemple.
 
Si on se met à gérer les cas où la syntaxe est mauvaise, on s'en sort plus. :/
 
(y'a un espace en trop avant ta dernière parenthèse fermante, sinon)


Message édité par sielfried le 18-11-2005 à 14:25:32

---------------
StarCraft Professional Gaming Database | [Ze Topic] Starcraft/BroodWar
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed