Tsubaru 1 Denunciar post Postado Agosto 15, 2012 Pessoas, venho pedir um help aqui, pois estou a manhã inteira tentando fazer isso e não consigo. Expressões regulares sempre deram um nó nos meus miolos. Já pesquisei no google, li trocentos tutoriais, até consigo fazer coisas simples, mas isso aqui não funcionando. O que eu quero fazer é remover seja lá o que estiver entre determinados delimitadores. Sejam os delimitadores, um texto ou um caracter. Por exemplo: <p>Título</p> Eu quero uma expressão que diga que tudo que estiver entre <p> e </p> , será apagado, inclusive <p> e </p> . Eu encontrei esse código na web: $string = preg_replace("'<[^>]+>'U", "", $string); Já alterei isso de todas as formas possíveis, mas nada funciona. Compartilhar este post Link para o post Compartilhar em outros sites
mangakah 217 Denunciar post Postado Agosto 15, 2012 Esses delimitadores são sempre tags HTML? Se sim, a melhor maneira de fazer isso não é usando expressões regulares, mas um parser para pegar o conteúdo de determinada tag em um documento extruturado (HTML, XML, etc.) Se for XML, use DOMDocument. Se for HTML, eu recomendo a excelente classe: Simple HTML DOM. Com ela você pode pegar o conteúdo de uma tag simplesmente usando, por exemplo: $content = "<p>Título</p><p>Título 2</p>"; $html = file_get_str($content); // Pega todos os paragrafos foreach($html->find('p') as $element) echo $element->innertext . '<br>'; Compartilhar este post Link para o post Compartilhar em outros sites
Tsubaru 1 Denunciar post Postado Agosto 15, 2012 Vou dar uma olhada nessa classe, valeu. Olha o gatilho que eu fiz: $texto = str_replace(array('<p>','</p>'),array('%','#'),$texto); $texto = preg_replace("'%[^#]+#'U", "", $texto); :grin: Eu tenho uma função que achei na internet uns tempos atrás, mas achei que teria uma forma mais prática/otimizada de fazer isso com regex. function retornaParte($texto, $entrada, $saida, $debug=false) { $posLeft=strpos($texto, $entrada); if ( $posLeft===false ) { if ( $debug ) { echo "Alerta: delimitador de entrada |'{$entrada}'| não encontrado"; } return false; } $posLeft+=strlen($entrada); $posRight=strpos($texto, $saida, $posLeft); if ( $posRight===false ) { if ( $debug ) { echo "Alerta: delimitador de saída |'{$saida}'| não encontrado"; } return false; } return trim(substr($texto, $posLeft, $posRight-$posLeft)); } Compartilhar este post Link para o post Compartilhar em outros sites
João Batista Neto 448 Denunciar post Postado Agosto 15, 2012 :seta: http://php.net/manua....strip-tags.php <?php $content = '<p>Título</p>'; echo strip_tags($content); Saída: Título <?php $content = '<p>Título</p> <strong>Isso deve ficar</strong>'; echo strip_tags($content, '<strong>'); Saída: Título <strong>Isso deve ficar</strong> Compartilhar este post Link para o post Compartilhar em outros sites
Tsubaru 1 Denunciar post Postado Agosto 15, 2012 João, eu uso strip_tags, mas o que precisava fazer nesse caso é evitar que o strip_tags sumisse com imagens e links. Uso essa gambiarra que fiz antes, depois o strip_tags, aí consigo o resultado que queria. :thumbsup: Compartilhar este post Link para o post Compartilhar em outros sites
João Batista Neto 448 Denunciar post Postado Agosto 15, 2012 Leia o manual, você verá que strip_tags possui um segundo parâmetro que permite que você especifique as tags que deseja permitir: <?php $content = '<p>Um parágrafo com um <a href="#">link dentro</a> e uma <img src="http://forum.imasters.com.br/public/style_images/imasters-2011/imasters-forum-logo.png" alt="imagem" /> dentro</p>'; echo strip_tags($content, '<img><a>'); Saída: Um parágrafo com um <a href="#">link dentro</a> e uma <img src="http://forum.imasters.com.br/public/style_images/imasters-2011/imasters-forum-logo.png" alt="imagem" /> dentro Compartilhar este post Link para o post Compartilhar em outros sites
Tsubaru 1 Denunciar post Postado Agosto 27, 2012 Valeu, João. O interessante seria mesmo se desse pra fazer o contrário, tipo, especificar o que você não quer que o strip_tags remova. ^_^ Compartilhar este post Link para o post Compartilhar em outros sites
William Bruno 1501 Denunciar post Postado Agosto 27, 2012 especificar o que você não quer que o strip_tags remova. ^_^ mas é exatamente isso que o segundo parâmetro faz. permitir == não remover. Compartilhar este post Link para o post Compartilhar em outros sites
Vinicius Ianni 189 Denunciar post Postado Agosto 27, 2012 Eu estou usando algo desse tipo: $texto ="<title>texto que desejo sem formatação</title>"; $search = array('@<title[^>]*?>@si'); $texto_limpo = strip_tags(preg_replace($search, '', $texto)); print $texto_limpo ."<p>"; É um pequeno exemplo que pode lhe dar uma luz no que deseja fazer Compartilhar este post Link para o post Compartilhar em outros sites