2010-11-15 6 views
0

J'ai un fichier qui contient un tas de liens:Obtenir l'URL de lien spécifique en PHP

<a href="http://site1.com">site 1</a> 
<a href="http://site2.com">site 2</a> 
<a href="http://site3.com">site 3</a> 

Je veux obtenir l'URL d'un lien avec un texte spécifique. Par exemple, la recherche de « site 2 » et Retournons « http://site2.com »

J'ai essayé ceci:

preg_match("/.*?[Hh][Rr][Ee][Ff]=\"(.*?)\">site 2<\/[Aa]>.*/", $contents, $match) 

(Je sais que le HREF = sera la dernière partie de l'ancre)

Mais il retourne

http://site1.com">site 1</a><a href="http://site2.com 

Est-il possible de faire une recherche en arrière, ou quelque chose? Je sais que je peux faire preg_match_all et boucler tout, mais j'essaie d'éviter cela.

+0

Ce fichier est-il un fichier HTML? Si c'est le cas, vous pouvez facilement parcourir le fichier en tant que 'DOMDocument'. –

+0

Non, malheureusement, ce n'est en aucun cas un document HTML bien formaté ou complet. –

+0

Il ne doit pas nécessairement s'agir d'un document HTML complet bien formaté. Un analyseur DOM peut toujours être le bon outil pour ce travail. Une regex est probablement aussi bien. –

Répondre

1

Essayez ceci:

preg_match("(<a.*?href=[\"']([^\"']+)[\"'][^>]?>site 2</a>)i",$contents,$match); 
$result = $match[1]; 

Hope this helps!

+0

Merci! Je n'ai pas pensé à vérifier pour m'assurer qu'il ne comprenait pas les caractères que je ne voulais pas ... Je l'ai réduit un peu en fonction des hypothèses que je suis capable de faire à propos de mes données: –

+0

preg_match ("/. *? href = \ "([^>] +) \"> site 2 <\/a>. */i ", $ contents, $ match) –

+0

Je suis heureux d'avoir pu aider :) –

Questions connexes