Ir para conteúdo

POWERED BY:

Arquivado

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

Marcelo Diniz

[Resolvido] Busca em uma string

Recommended Posts

Preciso de uma ajuda em uma coisinha, assim, tenho um string com varios produtos que podem variar.

 

a string pode ser

$string = "DI, DOL, FRC, ODI, ODO";
ou 
$string = "DOL, FRC, ODI";
ou 
$string = "DI, FRC, ODI, ODO, PAP, OUT";

dai para verificar se existe um determinado produto nesse string

 

if(eregi('DI', $string)) {
  //execulta as operações
} else {
  //imprime zero
}

o problema é que no segundo caso ele também me retorna verdadeiro.

 

O que poderia fazer para resolver isso?

 

Tks

Compartilhar este post


Link para o post
Compartilhar em outros sites

Primeiro: realmente preg_match é melhor que eregi(). Todas as funções preg_* são mais rápidas que as ereg_*, segundo o próprio manual do PHP

 

 

Segundo, o problema é que você precisa definir a borda da palavra, ou seja, precisa informar que o que há na string deve estar isolada, sem ser ligada a outras letras.

 

if ( preg_match( '/\bDI\b/i', $string ) )
{
    //true block
}
else
{
   // false block
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá, Boa tarde.

 

Como Evandro disse, preg_match é melhor, pois a eregi está obsoleta na versão 5.3. Uma opção seria:

 

if (preg_match("/([^a-z])(DI)([^a-z])/i", $string)) {
  //execulta as operações
} else {
  //imprime zero
}

[^a-z] - Negar qualquer tipo de letra. Ou seja, negamos qualquer letra antes e depois de DI.

Abraço.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Valew pessoal, já li um livro sobre expressão regular e sei pouco ainda, pois como todos sabemos, quando mais treino, mais uso, melhor fica, e eu ainda não treinei e nem usei muito, mas estou começando com isso.

 

Valew pela dica, pois iria usar o eregi mesmo e não iria ficar atento em relação ao preg_match.

 

Abs

Compartilhar este post


Link para o post
Compartilhar em outros sites

Espero que alguem ainda leia.

 

Ontem vcs me ajudaram a fazer um ER. Ótimo, ontem testei e funcionou.

 

Hj eu só rodei a página e ....... pau........

 

segue o erro, alguem saberia me dizer o que pode estar acontencendo?

 

Warning: preg_match() [function.preg-match]: Unknown modifier 'b' in C:\vertrigoserv\www\metas\xml\teste_prod.php on line 280

 

segue o trecho de código

 

if(preg_match('/\bDI/b\i', $rs['Cod_Produto'])) {

Compartilhar este post


Link para o post
Compartilhar em outros sites

e a barra do i também está invertida

 

Não está, pois a barra antes do "i" finaliza a ER. O "i" é só um modificador, para tornar a ER case-insensitive.

 

 

A barra o "b" realmente está invertida. Tem que modificar.

Compartilhar este post


Link para o post
Compartilhar em outros sites

ele inverteu a barra do i sim!

if(preg_match('/\bDI/b\i', $rs['Cod_Produto'])) {

Leia sobre aa funções preg_*. Elas necessitam de delimitadores. Nesse caso, a barra é um delimitador. A ER deve estar entre as barras:

 

/ER/

 

O "i" é só um modificador, que DEVE ficar fora dos delimitadores da ER.

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.