Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
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.
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));
}: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>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:
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
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. ^_^
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.
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
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:
// Pega todos os paragrafos
foreach($html->find('p') as $element)