2009-11-28 6 views
1

J'ai un tas de chaînes, chacune contenant une étiquette d'ancrage et url.php ancre tag regex

chaîne ex.

here is a link <a href="http://www.google.com">http://www.google.com</a>. enjoy! 

Je veux analyser les étiquettes d'ancrage et tout le reste.

résultat ex.

here is a link. enjoy! 

les urls dans la partie href = ne correspondent pas toujours le texte du lien mais (parfois il y a des raccourcis, texte urls parfois simplement descriptif).

J'ai du mal à comprendre comment faire cela avec des expressions régulières ou des fonctions PHP. Comment puis-je analyser une balise d'ancrage entière/lien d'une chaîne?

merci!

Répondre

0

Vous ne devriez pas utiliser regex to parse html et utiliser un analyseur html à la place. Mais si vous devez utiliser regex, et que le contenu interne de vos balises d'ancrage est garanti sans html comme </a>, chaque chaîne est garantie pour contenir une seule balise d'ancrage comme dans le cas de l'exemple, alors - seulement alors - vous peut utiliser quelque chose comme:

Remplacement /^(.+)<a.+<\/a>(.+)$/ avec $1$2

+0

merci beaucoup pour le lien. – minimalpop

0

Depuis votre problème semble être très précis, je pense que cela devrait le faire:

$str = preg_replace('#\s?<a.*/a>#', '', $str); 
0

il suffit d'utiliser votre fonctions de chaîne PHP normales.

$str='here is a link <a href="http://www.google.com">http://www.google.com</a>. enjoy!'; 
$s = explode("</a>",$str); 
foreach($s as $a=>$b){ 
    if(strpos($b ,"href")!==FALSE){ 
     $m=strpos("$b","<a"); 
     echo substr($b,0,$m); 
    } 
} 
print end($s); 

sortie

$ php test.php 
here is a link . enjoy! 
1

En regardant votre exemple de résultat, il semble que vous êtes juste de supprimer les balises/contenu - avez-vous voulu garder ce que vous dépouillé ou non? Sinon, vous recherchez peut-être strip_tags().

0
$string = 'here is a link <a href="http://www.google.com">http://www.google.com</a>. enjoy!'; 
$text = strip_tags($string); 
echo $text; //Outputs "here is a link . enjoy!"