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!

¿Fue útil?

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!"
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top