BRG 2 Denunciar post Postado Julho 12, 2009 Olá pessoal. tenho o seguinte código $pal = "Fé"; $string = preg_replace("/(".$pal."?)/i","<span class='palavrasdabusca'>\\0</span>",strip_tags(stripslashes($rsBiblia->DESCRICAO))); Ele funciona certo, porem ele grifa a palavra Fé, mais também a palavra Eufésio. Eu só queria a palavra inteira, e não no meio das outras palavras. Acho que tem que usar o \b(borda). Porem ja tentei de tudo que é jeito e nada... Valeu Compartilhar este post Link para o post Compartilhar em outros sites
Bruno Augusto 417 Denunciar post Postado Julho 12, 2009 Coloca a borda antes de abrir e de fechar o grupo. Compartilhar este post Link para o post Compartilhar em outros sites
Matias Rezende 50 Denunciar post Postado Julho 12, 2009 Não entendo de ER, mas se fizer assim não resolve? $pal = ' Fé ';//colocar um espaço antes e um depois Carlos Eduardo Compartilhar este post Link para o post Compartilhar em outros sites
BRG 2 Denunciar post Postado Julho 12, 2009 Coloca a borda antes de abrir e de fechar o grupo. $string = preg_replace("/\b(".$pal."?)\b/i","<span class='palavrasdabusca'>\\0</span>",strip_tags(stripslashes($rsBiblia->DESCRICAO))); ??? não funciono...rs Não entendo de ER, mas se fizer assim não resolve? $pal = ' Fé ';//colocar um espaço antes e um depois Carlos Eduardo Hum.. pode ser, mais não seria o correto né..rs E ele vai grifar _Fé_ , Compartilhar este post Link para o post Compartilhar em outros sites
Bruno Augusto 417 Denunciar post Postado Julho 12, 2009 Mas é claro que não vai casar. \b é o metacaractere de escape seguido da letra b, logo, um b literal O certo é \\b. Acredite, eu mesmo já apanhei muito por causa disso :P Compartilhar este post Link para o post Compartilhar em outros sites
Rafael Wapbrasil 1 Denunciar post Postado Julho 12, 2009 Tenta assim, exemplo: $frase = "festaaaa fe em deus que ele e justo cafe cafe aaafeeee aafe feaaa aafeaa"; $pal = "fe"; $string = preg_replace("/([^ ]*".$pal."[^ ]*)/i","<span class='palavrasdabusca'>$1</span>",$frase); echo $string; Compartilhar este post Link para o post Compartilhar em outros sites
BRG 2 Denunciar post Postado Julho 12, 2009 Mas é claro que não vai casar. \b é o metacaractere de escape seguido da letra b, logo, um b literal O certo é \\b. Acredite, eu mesmo já apanhei muito por causa disso :P Tranquilo, funcionou em partes.... E se eu tiver Fé, ele não vai grifar, pois do fé para a , não tem espaço. tem o lance do @, no caso tentei substitur o @pelo segundo \\b mais não rolou..rs Estou tentando aprender essas ERs... Tenta assim, exemplo: $frase = "festaaaa fe em deus que ele e justo cafe cafe aaafeeee aafe feaaa aafeaa"; $pal = "fe"; $string = preg_replace("/([a-zA-Z0-9]*".$pal."[a-zA-Z0-9]*)/i","<span class='palavrasdabusca'>$1</span>",$frase); echo $string; Então rafa, mais eu não quero que ele grife Café nem Café, apenas Fé separado, monossilaba e pode ter Fé, (junto com virgula) Fé' ai sem problemas.. Duvida 2 Quando eu us a-zA-Z eu não preciso do /i né?? .. Edit Tenta assim, exemplo: $frase = "festaaaa fe em deus que ele e justo cafe cafe aaafeeee aafe feaaa aafeaa"; $pal = "fe"; $string = preg_replace("/([^ ]*".$pal."[^ ]*)/i","<span class='palavrasdabusca'>$1</span>",$frase); echo $string; Tentei... funcionou, para Fé, Fé" etc..., porem ele ainda continua com Efésio, café...etc... Compartilhar este post Link para o post Compartilhar em outros sites
Rafael Wapbrasil 1 Denunciar post Postado Julho 12, 2009 Entendi errado entao. Mais ja esta resolvido ou nao? Compartilhar este post Link para o post Compartilhar em outros sites
BRG 2 Denunciar post Postado Julho 12, 2009 Entendi errado entao. Mais ja esta resolvido ou nao? Ainda não... com a ultima que postou deu quase certo. $string = preg_replace("/([^ ]*".$pal."[^ ]*)/i","<span class='palavrasdabusca'>$1</span>",$frase); Ele está grifando Fé, Fé", Fé'. o Que está correto. Porem ele ainda está grifando Café, Efésio... o que não é correto. Então precisava tirar essa parte da ER , Compartilhar este post Link para o post Compartilhar em outros sites
Rafael Wapbrasil 1 Denunciar post Postado Julho 12, 2009 Assim pega so a palavra certa: $frase = "festaaaa fe em deus que ele e justo cafe cafe aaafeeee aafe feaaa aafeaa"; $pal = "fe"; $string = preg_replace("/([ .,_@:\/\!\(\)-]".$pal."[ .,_@:\/\!\(\)-])/i"," <b>$1</b> ",$frase); echo $string; Compartilhar este post Link para o post Compartilhar em outros sites
BRG 2 Denunciar post Postado Julho 12, 2009 Assim pega so a palavra certa: $frase = "festaaaa fe em deus que ele e justo cafe cafe aaafeeee aafe feaaa aafeaa"; $pal = "fe"; $string = preg_replace("/([ .,_@:\/\!\(\)-]".$pal."[ .,_@:\/\!\(\)-])/i"," <b>$1</b> ",$frase); echo $string; Então cara.. quase.. olha so a imagem: Ela grifou _FÉ_ espaços e não grifou o fé" . Aff.. que treta.. Cara.. eu não sou muito religioso.. hauah mais ja estou começando a rezar... ahuahauah Compartilhar este post Link para o post Compartilhar em outros sites
Fernando Rodrigo Cardoso 2 Denunciar post Postado Julho 12, 2009 Tenta assim, testei e deu certo : $var = preg_replace('/(\W)('.$palavra.')(\W)/i','\\1<b>\\2</b>\\3',$var); Dúvida, leia aí : http://guia-er.sourceforge.net/aliens.html []'s flws Compartilhar este post Link para o post Compartilhar em outros sites
BRG 2 Denunciar post Postado Julho 13, 2009 Tenta assim, testei e deu certo : $var = preg_replace('/(\W)('.$palavra.')(\W)/i','\\1<b>\\2</b>\\3',$var); Dúvida, leia aí : http://guia-er.sourceforge.net/aliens.html []'s flws Salve Fernando. Funciono direitinho... porem tem como explicar passo a passo ai o que fez?? não entendi muito bem a parte do \\1<b>\\2</b>\\3. Obrigado Rafael pela atenção tbm.. Mais uma duvida. tem como aplicar isso no LIKE do SQL?? (usando Mysql) ?? , Compartilhar este post Link para o post Compartilhar em outros sites
Bruno Augusto 417 Denunciar post Postado Julho 13, 2009 Tenta assim, testei e deu certo : $var = preg_replace('/(\W)('.$palavra.')(\W)/i','\\1<b>\\2</b>\\3',$var); Dúvida, leia aí : http://guia-er.sourceforge.net/aliens.html []'s flws Salve Fernando. Funciono direitinho... porem tem como explicar passo a passo ai o que fez?? não entendi muito bem a parte do \\1<b>\\2</b>\\3. Obrigado Rafael pela atenção tbm.. Mais uma duvida. tem como aplicar isso no LIKE do SQL?? (usando Mysql) ?? , Você viu a tabela do site passado? O que ele fez foi, no segundo grupo buscar a palavra que você quer. Nos grupos 1 e 3 (\W), casar qualquer coisa que não seja uma palavra (dígitos, pontuação, espaços em branco e novas linhas). O /i é modificador de "ignorãncia", para casar maiúsculas e minúsculas do mesmo jeito. Depois da vírgula, no segundo argumento de preg_replace(), tem a substituição, negritando o termo. Só atente para o uso de <b></b>. O certo, em XHTML é <strong></strong> Já em MySQL é possível sim, através da cláusula REGEXP. Porém algumas modificações podem ser necessárias na sua ER. Acredito que agora sim esteja de fato RESOLVIDO ^^ Compartilhar este post Link para o post Compartilhar em outros sites
Fernando Rodrigo Cardoso 2 Denunciar post Postado Julho 13, 2009 Mais uma coisa, use preg_quote() para escapar os possiveis metacaracteres ER na busca Exemplo : $palavra = preg_quote($palavra); Se for usar pra busca em sintaxe SQL, não esqueça de adicionar barras invertidas, através de addslashes() ou mysql_real_escape_string() depois do uso do preg_quote(). @Imaggens Instrução bem detalhada XD http://forum.imasters.com.br/public/style_emoticons/default/thumbsup.gif []'s Compartilhar este post Link para o post Compartilhar em outros sites
BRG 2 Denunciar post Postado Julho 13, 2009 O sql dessa função: $var = preg_replace('/(\W)('.$palavra.')(\W)/i','\\1<b>\\2</b>\\3',$var); É esquivalente a isso?? está correto?? SELECT * FROM artigos WHERE id_secao = '1' AND descricao REGEXP '[^[:alnum:]_]".$PALAVRA."[^[:alnum:]_]' LIMIT 0 , 30 , Compartilhar este post Link para o post Compartilhar em outros sites
Bruno Augusto 417 Denunciar post Postado Julho 13, 2009 Já que você não precisaria substituir nada via query, então sim, é a mesma coisa. Mas prefira os barra-letra ao invés das classes POSIX. Compartilhar este post Link para o post Compartilhar em outros sites
BRG 2 Denunciar post Postado Julho 13, 2009 Já que você não precisaria substituir nada via query, então sim, é a mesma coisa. Mas prefira os barra-letra ao invés das classes POSIX. Então Imaggens, para usar o barra-letra ficaria como?? Eu tentei.. mais não consegui com o addslashes(). Edit: Tem alguma desvantagem usando POSIX??? , Compartilhar este post Link para o post Compartilhar em outros sites
Fernando Rodrigo Cardoso 2 Denunciar post Postado Julho 13, 2009 O sql dessa função: $var = preg_replace('/(\W)('.$palavra.')(\W)/i','\\1<b>\\2</b>\\3',$var); É esquivalente a isso?? está correto?? SELECT * FROM artigos WHERE id_secao = '1' AND descricao REGEXP '[^[:alnum:]_]".$PALAVRA."[^[:alnum:]_]' LIMIT 0 , 30 , Só mais um detalhe, adicionei o metacaracter - \A e \Z - começo do texto e fim, da forma anterior ele não casava palavras no começo e fim.. Ex : considere a busca como 'Teste' Teste de palavra palavra de Teste As duas frase acima, não resultavam na pesquisa.Finalizando, a modificação : "SELECT * FROM artigos WHERE id_secao = '1' AND descricao REGEXP '([^[:alnum:]_]|\A)".$palavra."([^[:alnum:]_]|\Z)' LIMIT 0, 30" Com barra-letra, ficaria identico ao que eu postei em php, mas que eu saiba o mySQL não tem suporte à algumas, \W não funfa, pelo menos o meu não tem. ^_^ Outra coisa importante, não se esqueça de antes de passar variaveis para REGEXP no mySQL, usar o preg_quote() para escapar os metacaracteres e depois mysql_real_escape_string() para escapar as barras invertidas criadas pelo preg_quote() anteriormente. []'s Compartilhar este post Link para o post Compartilhar em outros sites
BRG 2 Denunciar post Postado Julho 13, 2009 Valeu fernando... Obrigado... , Compartilhar este post Link para o post Compartilhar em outros sites