Question
J'ai un tas de chaînes, chacune contenant une balise d'ancrage et une URL.
chaîne ex.
here is a link <a href="http://www.google.com">http://www.google.com</a>. enjoy!
Je veux analyser les balises d'ancrage et tout le reste.
résultat ex.
here is a link. enjoy!
Cependant, les URL de la partie href = ne correspondent pas toujours au texte du lien (il existe parfois des URL raccourcies, parfois uniquement du texte descriptif).
J'ai beaucoup de difficulté à comprendre comment faire cela avec des expressions régulières ou des fonctions php. comment puis-je analyser une balise d'ancrage / un lien entier à partir d'une chaîne?
merci!
La solution
Vous ne devez pas utiliser regex à analyser 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>
, et que chaque chaîne ne contient qu'un seul balise d'ancrage, comme dans l'exemple de cas, alors - seulement à ce moment-là - vous pouvez utiliser quelque chose comme:
Remplacement de /^(.+)<a.+<\/a>(.+)$/
par $1$2
Autres conseils
En regardant votre exemple de résultat, il semble que vous supprimiez simplement les balises / le contenu. Souhaitez-vous conserver ce que vous avez supprimé ou non? Sinon, recherchez peut-être strip_tags()
.
Puisque votre problème semble être très spécifique, je pense que cela devrait le faire:
$str = preg_replace('#\s?<a.*/a>#', '', $str);
utilisez simplement vos 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!
$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!"