strip_tags remove quitar from etiquetas etiqueta eliminar php regex string

quitar - remove tags from string php



¿Cómo eliminar texto entre etiquetas en php? (6)

A pesar de usar PHP por años, nunca aprendí realmente cómo usar expresiones para truncar cuerdas adecuadamente ... ¡lo cual ahora me está mordiendo la espalda!

¿Alguien me puede proporcionar algo de ayuda para truncar esto? Necesito cortar la porción de texto de la url, girando

<a href="link.html">text</a>

dentro

<a href="link.html"></a>


¿Qué pasa con algo como esto, teniendo en cuenta que es posible que desee reutilizarlo con otros href s:

$str = ''<a href="link.html">text</a>''; $result = preg_replace(''#(<a[^>]*>).*?(</a>)#'', ''$1$2'', $str); var_dump($result);

Que te llevará:

string ''<a href="link.html"></a>'' (length=24)

(Estoy considerando que hiciste un error tipográfico en el OP?)


Si no necesita coincidir con ninguna otra href, podría usar algo como:

$str = ''<a href="link.html">text</a>''; $result = preg_replace(''#(<a href="link.html">).*?(</a>)#'', ''$1$2'', $str); var_dump($result);

Lo que también te llevará a:

string ''<a href="link.html"></a>'' (length=24)


Como comentario adicional: para un HTML más complejo, no intente usar expresiones regulares: funcionan bien para este tipo de situación simple, pero para una porción de HTML de la vida real, en realidad no ayudan, en general: HTML no es bastante "regular" "suficiente" para ser analizado por expresiones regulares.


No necesitas capturar las etiquetas en sí. Simplemente apunte el texto entre las etiquetas y reemplácelo con una cadena vacía. Super simple

Código: ( Demo )

$string=''<a href="link.html">text</a>''; echo preg_replace(''/<a[^>]*>/K[^<]*/'','''',$string); // the opening tag--^^^^^^^^ ^^^^^-match everything before the end tag // ^^-restart fullstring match

Salida:

<a href="link.html"></a>

O en los casos marginales cuando el texto del enlace contiene un < , use esto: ~<a[^>]*>/K.*?(?=</a>)~

Esto evita el gasto de los grupos de captura que utilizan un cuantificador perezoso, el reinicio de cadena completa /K y un "lookahead".


Puede usar la subcadena en combinación con stringpos, aunque este no es un enfoque muy bueno.

Comprobar: PHP Manual - Funciones de cadena

Otra forma sería escribir una expresión regular para que coincida con sus criterios. Pero para resolver su problema rápidamente, las funciones de cadena funcionarán ...

EDIT: he subestimado la audiencia. ;) Adelante con las expresiones regulares ... ^^


Solo use strip_tags() , que eliminaría las etiquetas y dejaría solo el texto deseado entre ellas


Utilizando SimpleHTMLDom :

<?php // example of how to modify anchor innerText include(''simple_html_dom.php''); // get DOM from URL or file $html = file_get_html(''http://www.example.com/''); //set innerText to null for each anchor foreach($html->find(''a'') as $e) { $e->innerText = null; } // dump contents echo $html; ?>


$str = preg_replace(''#(<a.*?>).*?(</a>)#'', ''$1$2'', $str)