PHP / regex: ¿Cómo obtener el valor de cadena de la etiqueta HTML?

Necesito ayuda con expresiones regulares o preg_match porque aún no soy tan experimentado con respecto a esos, así que este es mi problema.

Necesito obtener el valor “obtener”, pero creo que mi función tiene un error. La cantidad de tags html es dinámica. Puede contener muchas tags html anidadas como una etiqueta en negrita. Además, el valor “consígame” es dynamic.

 <?php function getTextBetweenTags($string, $tagname) { $pattern = "/(.*?)/"; preg_match($pattern, $string, $matches); return $matches[1]; } $str = '

get me

'; $txt = getTextBetweenTags($str, "font"); echo $txt; ?>

 (.*)<\/$tagname>/"; preg_match($pattern, $string, $matches); return $matches[1]; } $str = '

get me

'; $txt = getTextBetweenTags($str, "font"); echo $txt; ?>

Eso debería hacer el truco

En su patrón, simplemente desea hacer coincidir todo el texto entre las dos tags. Por lo tanto, podría usar, por ejemplo, un [\w\W] para unir todos los caracteres.

 function getTextBetweenTags($string, $tagname) { $pattern = "/<$tagname>([\w\W]*?)<\/$tagname>/"; preg_match($pattern, $string, $matches); return $matches[1]; } 

Prueba esto

 $str = ' '; preg_match_all("#([^<]+)#", $str, $foo); print_r($foo[1]); 

Como los valores de los atributos pueden contener un carácter simple > , pruebe esta expresión regular:

 $pattern = '/<'.preg_quote($tagname, '/').'(?:[^"'>]*|"[^"]*"|\'[^\']*\')*>(.*?)<\/'.preg_quote($tagname, '/').'>/s'; 

Pero las expresiones regulares no son adecuadas para analizar lenguajes no regulares como HTML. Debería utilizar un analizador como SimpleXML o DOMDocument .

Los siguientes fragmentos de php devolverían el texto entre tags / elementos html.

regex: “/tagname(.*)endtag/” devolverá el texto entre las tags.

es decir

 $regex="/[start_tag_name](.*)[/end_tag_name]/"; $content="[start_tag_name]SOME TEXT[/end_tag_name]"; preg_replace($regex,$content); 

Devolverá “ALGÚN TEXTO”.

Saludos,

Web-Farmer @ letsnurture.com

 $userinput = "http://www.example.vn/"; //$url = urlencode($userinput); $input = @file_get_contents($userinput) or die("Could not access file: $userinput"); $regexp = "]*>(.*)<\/tagname>"; //==Example: //$regexp = "]*>(.*)<\/div>"; if(preg_match_all("/$regexp/siU", $input, $matches, PREG_SET_ORDER)) { foreach($matches as $match) { // $match[2] = link address // $match[3] = link text } } 

try $pattern = "<($tagname)\b.*?>(.*?)" y return $matches[2]