2011-07-29 8 views

Respuesta

16
$search = "/[^<tag>](.*)[^<\/tag>]/"; 
$replace = "your new inner text"; 
$string = "<tag>i dont know what is here</tag>"; 
echo preg_replace($search,$replace,$string); 

salidas:

<tag>your new inner text</tag> 
+0

Estoy asumiendo que desea reemplazar el contenido de las etiquetas, y no sólo reemplazar la cadena completa . – rlemon

+0

Debería usar lookaround en su lugar, para ser honesto. –

+0

Ejecutando este código como aparece 'Advertencia: preg_replace() [function.preg-replace]: modificador desconocido' t 'en la línea 1' – anthonygore

4
$string = "<tag>i dont know what is here</tag>" 
$string = "<tag></tag>"; 
echo $string; // <tag></tag> 

o simplemente?

$string = str_replace($string, "<tag></tag>", $string); 

Lo siento, no pude resistir. Tal vez actualice su pregunta con algunos detalles más. ;)

+0

i dnot sé caliente para poner la pregunta .... – faq

6
$string = "<tag>i dont know what is here</tag>" 

$string = preg_replace('#(<tag.*?>).*?(</tag>)#', '$1$2', $string) 
+0

Falta una cadena de reemplazo en el segundo argumento: '$ 1'. 'Nuevo texto'. '$ 2' – gradosevic

17

una función genérica:

function replace_between($str, $needle_start, $needle_end, $replacement) { 
    $pos = strpos($str, $needle_start); 
    $start = $pos === false ? 0 : $pos + strlen($needle_start); 

    $pos = strpos($str, $needle_end, $start); 
    $end = $pos === false ? strlen($str) : $pos; 

    return substr_replace($str, $replacement, $start, $end - $start); 
} 

DEMO

+1

mejor que la respuesta aceptada. no es necesario usar un reemplazo de expresiones regulares a menos que lo necesite. – sgroves

3

si la "etiqueta" cambios:

$string = "<tag>i dont know what is here</tag>"; 
$string = preg_replace('|^<([a-z]*).*|', '<$1></$1>', $string) 
echo $string; // <tag></tag> 
0

Si no sabe qué hay dentro de la etiqueta <tag>, es posible que haya otra etiqueta <tag> allí, p. Ej.

<tag>something<tag>something else</tag></tag> 

Por lo tanto, una función genérica de reemplazo de cadenas no hará el trabajo.

Una solución más robusta es tratar la cadena como XML y manipularla con DOMDocument. Es cierto que esto solo funciona si la cadena es válida como XML, pero todavía creo que es una solución mejor que una cadena de reemplazo.

$string = "<tag>i don't know what is here</tag>"; 
$replacement = "replacement"; 

$doc = new DOMDocument(); 
$doc->loadXML($str1); 
$node = $doc->getElementsByTagName('tag')->item(0); 
$newNode = $doc->createElement("tag", $replacement); 
$node->parentNode->replaceChild($newNode, $node); 
echo $str1 = $doc->saveHTML($node); //output: <tag>replacement</tag> 
Cuestiones relacionadas