etiqueta de ancla php regex
Pregunta
Tengo un montón de cadenas, cada una con una etiqueta de anclaje y una URL.
cadena ex.
here is a link <a href="http://www.google.com">http://www.google.com</a>. enjoy!
Quiero analizar las etiquetas de anclaje y todo lo demás.
resultado ex.
here is a link. enjoy!
las URL en la porción href = no siempre coinciden con el texto del enlace (a veces hay URL acortadas, a veces solo texto descriptivo).
Me está resultando extremadamente difícil descubrir cómo hacerlo con expresiones regulares o funciones php. ¿Cómo puedo analizar una etiqueta / enlace de anclaje completo desde una cadena?
¡gracias!
Solución
No debe usar regex para analizar html y utilizar un analizador html en su lugar.
Pero si debe usar regex, y se garantiza que el contenido interno de sus etiquetas de anclaje estará libre de html como </a>
, y se garantiza que cada cadena contenga solo una etiqueta de anclaje como en el caso de ejemplo, entonces - solo entonces - puedes usar algo como:
Reemplazar /^(.+)<a.+<\/a>(.+)$/
con $1$2
Otros consejos
Mirando su ejemplo de resultado, parece que solo está eliminando las etiquetas / el contenido: ¿quería conservar lo que eliminó o no? Si no, es posible que esté buscando strip_tags()
.
Dado que su problema parece ser muy específico, creo que esto debería hacerlo:
$str = preg_replace('#\s?<a.*/a>#', '', $str);
simplemente use sus funciones de cadena 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);
salida
$ 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!"