Ir para conteúdo

POWERED BY:

Arquivado

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

Helena Barden

[Resolvido] Busca por termo exato Expressão Regular

Recommended Posts

Olá Pessoal,

 

Estou fazendo uma pesquisa por uma palavra específica em um texto.

 

Quando encontro a palavra, quero que ela seja demarcada, modificando sua cor de fundo.

 

A funcionalidade está ok, porém eu quero que demarque apenas a ocorrência onde o termo for exato, e não toda vez que encontrar algo aproximado a palavra buscada.

 

Exemplo:

Palavra buscada: de

Testo: Desde o início desejei isto para um de nós.

 

A palavra desde e desejei não deve ser demarcada. Apenas os "de's" da frase.

 

No SQL tenho assim, e funciona corretamente: SELECT X RLIKE '[[:<:]]".$Y."[[:>:]]'

 

Para demarcar até agora cheguei a isto preg_match_all('/(|\A|\s|\.|\,|\;|\n|\r)de(|\.|\;|\,|\s|\z)/i', 'Desde o início desejei isto para ao menos um de nós.', $result), mas desta forma marca todas ocorrências, que não é o que eu preciso.

 

Alguém sabe como eu poderia solucionar?

 

Agradeço desde já.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Palavra buscada: de

Testo: Desde o início desejei isto para um de nós.

 

Hey Helena, tenta assim:

 

$str = "Desde o início desejei isto para ao menos um de nós, isto deve funcionar";
$key = "isto";

$destacado = preg_replace( sprintf( "/\\b(%s)\\b/" , $key ) , "<span class='destacado'>$1</span>" , $str );

echo $destacado;

Vai imprimir:

 

Desde o início desejei <span class='destacado'>isto</span> para ao menos um de nós, <span class='destacado'>isto</span> deve funcionar

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom... naquele caso que você colocou acima, ao invés de:

 

preg_match_all('/(|\A|\s|\.|\,|\;|\n|\r)de(|\.|\;|\,|\s|\z)/i', 'Desde o início desejei isto para ao menos um de nós.', $result)

 

você poderia alterar o 'de' para ' de '

 

assim, ele só vai alterar os de's que tiverem espaços antes e depois... Assim:

 

preg_match_all('/(|\A|\s|\.|\,|\;|\n|\r) de (|\.|\;|\,|\s|\z)/i', 'Desde o início desejei isto para ao menos um de nós.', $result)

Mas creio que isto seja apenas um exemplo, então, estou procurando uma forma menos suja.. caso ache eu posto aqui.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Agradeço mais uma vez o post, mas se eu colocar um espaço no final, quando estiver no final da frase vou ter problemas.

 

Bom, parece que consegui resolver aqui, só para saberem utilizei a seguinte expressão em um replace: "/(\A|\b)de(\b|\Z)/i";

 

Abraços e obrigada pelo auxílio.

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.