Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

BRG

[Resolvido] Busca com regex/preg

Recommended Posts

Bom dia pessoal, gostaria de uma ajuda duas...

 

Eu tenho a seguinte string:

 

$busca = strip_tags("<p>1 NO princípio criou Deus os céus e a terra. <br />2 E a terra era sem forma e vazia; e havia trevas sobre a face do abismo; e o Espírito se movia sobre a face das águas. <br />3 E disse Deus: Haja luz; e houve luz. <br />4 E viu Deus que era boa a luz; e fez Deus separação entre a luz e as trevas. <br />5 E Deus chamou à luz Dia; e às trevas chamou Noite. E foi a tarde e a manhã, o dia primeiro. <br />6 E disse Deus: Haja uma expansão no meio das águas, e haja separação entre águas e águas.<br />");

tenho uma palavra chave

$palavra = "Deus";

Ai eu tenho essa funcão para quebrar os numeros 1, 2,3 ,4 5, 6,,,

print_r( $resultado = preg_split("/[0-9] /", $busca));

E essa para destacar a palavra chave

$descricao =  preg_replace("/($palavra?)/i","<b>\\0</b>",$busca));

e juntando as duas ficaria...

print_r( $resultado = preg_split("/[0-9] /", $descricao));

Bom.. o que eu queria era exibir meu resultado assim

....criou[b] Deus[/b] os céus e a terra...

Uma quantidade N de caracter antes e uma quantidade N de palavras depois da palavra chave.

 

Edit:

Só uma observação

Alem disso.. teria que comparar qual teria a palavra Deus. No caso o versiculo 2 não retornaria na busca.

 

Alguem poderia me ajudar??

 

,

Compartilhar este post


Link para o post
Compartilhar em outros sites

recomendo fazer algo mais simples

 

por exemplo,

veja que o texto possui um "pattern"

 

cada versículo é separado pela tag html <br>

 

faça um explode() do <br>

 

cada indice do vetor receberá cada versículo

 

com isso, basta trabalhar com funções de string

sem precisar complicar com regex..

Compartilhar este post


Link para o post
Compartilhar em outros sites

recomendo fazer algo mais simples

 

por exemplo,

veja que o texto possui um "pattern"

 

cada versículo é separado pela tag html <br>

 

faça um explode() do <br>

 

cada indice do vetor receberá cada versículo

 

com isso, basta trabalhar com funções de string

sem precisar complicar com regex..

Mais então.. estou tirando as tags htmls com strip_tags, pois nem sei se sempra vai haver um <br>

 

Já está separando certinho... e tudo mais.. a unica coisa que preciso é Uma quantidade N de caracter antes e uma quantidade N de palavras depois da palavra chave.

 

,

Compartilhar este post


Link para o post
Compartilhar em outros sites

function destacar($palavra, $texto){

$limite = 10; //AQUI você COLOCA O NUMERO DE CARACTERS QUE VAI APARECER ANTES E DEPOIS.

 

$explode = explode($palavra, $texto);

$parte1 = $explode[0];

$parte2 = $explode[1];

$parte1 = strrev($parte1);

$parte1 = substr($parte1,0,$limite);

$parte1 = strrev($parte1);

$parte2 = substr($parte2,0,$limite);

$final = '...' . $parte1 . $palavra . $parte2 . '...';

return $final;

}

 

$palavra = "Deus";

$string = "No principio criou Deus os ceus e a terra. ";

echo destacar($palavra, $string);

Compartilhar este post


Link para o post
Compartilhar em outros sites

Opa.. rafael.. era isso mesmo.. vou testar aqui e edito este topico se estiver OK..

 

obrigado..

 

 

 

Edit:

 

Rafael.. é bem isso mesmo... so teria como dar um ajuste??

 

tem como não cortar uma palavra?? é que as vezes fica ...sericordia.

 

Valeu

 

,

Compartilhar este post


Link para o post
Compartilhar em outros sites

você tinha falado separar por caracteres, mais para separar por palavra fica assim:

function destacar($palavra, $texto){
$limite = 4; // O numero limite de PALAVRAS 
$limite++;
$explode = explode($palavra, $texto);
$parte1 = $explode[0];
$parte1 = strrev($parte1);
$parte2 = $explode[1];

$palavras1 = explode(" ",$parte1);
$palavras2 = explode(" ",$parte2);

$ant = "";
for($i=0; $i<$limite;$i++){
$ant .= $palavras1[$i] . " ";
}

unset($i); // Por via das duvida :D

$dep = "";
for($i=0; $i<$limite;$i++){
$dep .= $palavras2[$i] . " ";
}


$ant = strrev($ant);
$final = '...' . $ant . $palavra . $dep . '...';
return chop(trim($final));
}

$palavra = "<b>Deus</b>"; // Coloquei <b> pq a palavra vai ganhar estas tags quando passar pela ER do seu codigo que postou
$string = "No principio criou <b>Deus</b> os ceus e a terra. ";
echo destacar($palavra, $string);

Compartilhar este post


Link para o post
Compartilhar em outros sites

você tinha falado separar por caracteres, mais para separar por palavra fica assim:

function destacar($palavra, $texto){
$limite = 4; // O numero limite de PALAVRAS 
$limite++;
$explode = explode($palavra, $texto);
$parte1 = $explode[0];
$parte1 = strrev($parte1);
$parte2 = $explode[1];

$palavras1 = explode(" ",$parte1);
$palavras2 = explode(" ",$parte2);

$ant = "";
for($i=0; $i<$limite;$i++){
$ant .= $palavras1[$i] . " ";
}

unset($i); // Por via das duvida :D

$dep = "";
for($i=0; $i<$limite;$i++){
$dep .= $palavras2[$i] . " ";
}


$ant = strrev($ant);
$final = '...' . $ant . $palavra . $dep . '...';
return chop(trim($final));
}

$palavra = "<b>Deus</b>"; // Coloquei <b> pq a palavra vai ganhar estas tags quando passar pela ER do seu codigo que postou
$string = "No principio criou <b>Deus</b> os ceus e a terra. ";
echo destacar($palavra, $string);

Rafael, olhando aqui agora, o script cai no problema da ER deste tópico: http://forum.imasters.com.br/index.php?showtopic=353239

 

Veja a imagem:

Imagem Postada

http://i31.tinypic.com/30tgzzp.gif

Ele acha a palavra, porem é a palavra com derivações, e não a palavra monossilaba (podendo ter caracteres especiais..) Tem alguma adptação para isso???

 

,

Compartilhar este post


Link para o post
Compartilhar em outros sites

você tinha falado separar por caracteres, mais para separar por palavra fica assim:

function destacar($palavra, $texto){
$limite = 4; // O numero limite de PALAVRAS 
$limite++;
$explode = explode($palavra, $texto);
$parte1 = $explode[0];
$parte1 = strrev($parte1);
$parte2 = $explode[1];

$palavras1 = explode(" ",$parte1);
$palavras2 = explode(" ",$parte2);

$ant = "";
for($i=0; $i<$limite;$i++){
$ant .= $palavras1[$i] . " ";
}

unset($i); // Por via das duvida :D

$dep = "";
for($i=0; $i<$limite;$i++){
$dep .= $palavras2[$i] . " ";
}


$ant = strrev($ant);
$final = '...' . $ant . $palavra . $dep . '...';
return chop(trim($final));
}

$palavra = "<b>Deus</b>"; // Coloquei <b> pq a palavra vai ganhar estas tags quando passar pela ER do seu codigo que postou
$string = "No principio criou <b>Deus</b> os ceus e a terra. ";
echo destacar($palavra, $string);

Rafael, olhando aqui agora, o script cai no problema da ER deste tópico: http://forum.imasters.com.br/index.php?showtopic=353239

 

Veja a imagem:

Imagem Postada

http://i31.tinypic.com/30tgzzp.gif

Ele acha a palavra, porem é a palavra com derivações, e não a palavra monossilaba (podendo ter caracteres especiais..) Tem alguma adptação para isso???

 

,

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

function destacar($frase, $word){

if(!strstr($frase, $word))

return $frase;

 

$limite = 5; // Limite de palavras

 

while(strstr($frase, " "))

$frase = str_replace(" ", " ", $frase);

$pos1 = strpos($frase, $word);

$pos2 = $pos1 + strlen($word);

$str1 = substr($frase, 0, $pos1);

$str2 = substr($frase, $pos2, strlen($frase));

 

// Fazer a separacao

if(strstr($str1, " ")){

$str1exp = array_reverse(explode(" ", $str1));

$temp_str1 = "";

for($i=count($str1exp) - 4; $i >= (count($str1exp) - $limite - 3); $i--){

$temp_str1 .= $str1exp[$i] . " ";

}

}

 

if(strstr($str2, " ")){

$expstr = substr($frase, strpos($frase, $word), strlen($frase));

$expstr = explode(" ", $expstr);

unset($i);

$temp_str2 = "";

for($i=1;$i<$limite+1;$i++){

$temp_str2 .= $expstr[$i] . " ";

}

}

 

$ret = $temp_str1 . $word . ' ' . $temp_str2;

while(strstr($ret, " "))

$ret = str_replace(" ", " ", $ret);

return $ret;

}

 

$frase = "aaaa bbbb cccc dddd eeee ffff gggg hhhh iiii jjjj kkkk llll mmm nnn ooo ppp";

$word = "aaaa";

echo destacar($frase, $word);

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.